С учетом строки, отображаемой в виде текста (extactly this sequence), это строка шестнадцатеричных чисел.
В Jpeg магические числа такого файла равны FF D8
как первые два байта и FF D9
как последние два байта (сравните с How to identify contents of a byte[] is a jpeg?).
Эти шестнадцатеричное (шест в коротких) номеров можно найти в начале и в конце вашей последовательности, а также:
FF00D800FF00 ... 1F00FF00D9000
## ## ## ##
Цель этих магических чисел также показывает, что значения шестнадцатеричные будут добавлять с 00
всегда. Это также показывает, что в самом конце найден дополнительный сингл 0
.
Таким образом, четыре символа всегда образуют одно значение. Hex-encoded это выглядит как 16-битные значения, однако значение никогда не выходит за 8-битный диапазон (0-255), поэтому всегда отображается 00
.
С помощью этой информации, а затем лишь один может попытаться превратить это в двоичную строку, что РНР imagecreatefromstring
может иметь дело с:
$string = implode('', // map array of binary strings to binary string
array_map('chr', // map ord integer value to character
unpack('v*', // unsigned short (always 16 bit, little endian byte order)
pack("H*", $data) // hex to binary (high nibble first)
)));
Используя такую строку, то в
$result = imagecreatefromstring($string);
imagejpeg($result, 'test.jpg');
показывает следующий PHP уведомление об ошибке:
imagecreatefromstring(): gd-jpeg, libjpeg: recoverable error: Corrupt JPEG data: bad Huffman code
и следующие изображения:
Это выглядит безнадежно сломана. Таким образом, вы, вероятно, сталкиваетесь с дополнительной проблемой кодирования здесь. Последний байт NUL
предполагает, что сделано больше, и также должна быть причина, по которой данные были сохранены как 16-битные шестнадцатеричные значения, а не только двоичные данные (blob), поскольку базы данных поддерживают это.
Но не тратьте слишком много времени из-за недостатка программного обеспечения и конфигурации, которые использовались в прошлом, это может быть просто потеря данных, поэтому все, что вы можете сделать, это восстановить из резервных копий.
Это не двоичный, это шестнадцатеричный. – vascowhite
ОК, но это данные изображения, сохраненные в базе данных –
Возможно, это поможет вам http://stackoverflow.com/questions/13274691/coverting-hex-to-image-in-php. И попробуйте найти код, откуда изображение будет сохранено в базе данных, если у вас есть доступ к нему. – alwaysLearn