3 ноября 2012 г.

PHP. Добавляем комментарий в JPEG

Ниже приведен пример скрипта, в котором я получаю содержимое картинки, хранящейся на диске, и преобразовываю его в шестнадцатеричное представление. Далее я создаю строку комментария. Она состоит из
  • маркера 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.

1 комментарий: