Ниже приведен пример скрипта, в котором я получаю содержимое картинки, хранящейся на диске, и преобразовываю его в шестнадцатеричное представление. Далее я создаю строку комментария. Она состоит из
- маркера COM (комментарий), который в шестнадцатеричном представлении выглядит так: 'fffe',
- двух байтов, указывающих длину комментария + 2 этих байта ('0008' строка содержит 6 байт),
- собственно, строки комментария.
Хотя комментарий в файле JPEG может появляться где угодно, для простоты примера, я дописываю комментарий в начало файла, сразу после маркера начала изображения (SOI - 'ffd8'). В конец файла комментарий дописывать нельзя, потому что маркер конца изображения (EOI - 'ffd9') должен следовать сразу после сжатых данных. Потом я вывожу картинку в браузер.
<?php $image = file_get_contents('head1.jpg'); $imageHex = bin2hex($image); $hexString = '636f6d6d656e'; $commentBlock = 'fffe0008'.$hexString; $imageHex = str_replace('ffd8', 'ffd8'.$commentBlock, $imageHex); $imageBin = pack('H*', $imageHex); header('Content-Type: image/jpeg'); echo $imageBin; ?>
Вместо функции pack можно использовать hex2bin, добавленную в PHP 5.4.0.