PHP добавить комментарий iTXt к изображению PNG - PullRequest
0 голосов
/ 13 января 2012

Я искал это везде. Я знаю, что это можно сделать с помощью некоторых библиотек в .net, но я действительно хочу, чтобы мой скрипт генерировал «помеченное» изображение. Причина в том, что мы являемся организатором форума и объединились с компанией, разрабатывающей темы. Компания, создающая темы, хочет, чтобы мы могли отслеживать любые незаконно распространяемые темы. Я видел комментарий iTXt в упражнении GCHQ CanYouCrackIt и думаю, что это будет лучший, но не навязчивый метод защиты нашей собственности.

1 Ответ

7 голосов
/ 13 января 2012

Совет: если у вас есть фиксированный блок iTXt , который вы хотите добавить к изображению, быстрой и грязной процедурой может быть просто вставить его непосредственно перед блоком IEND (12 байт) оригинальное изображение. Это должно работать, потому что iTXt может быть размещен до или после данных изображения. Конечно, это не проверяет, есть ли чанк как уже там.

Вот пример кода, использующий кусок tEXt (немного проще), он нуждается в некоторой полировке, но в основном работает:

<?php   

    addTextToPngFile("x.png","x2.png","Watermark","Hi this is a TEXT test");

    function addTextToPngFile($pngSrc,$pngTarget,$key,$text) {
        $chunk = phpTextChunk($key,$text);
        $png = file_get_contents($pngSrc);
        $png2 = addPngChunk($chunk,$png);
        file_put_contents($pngTarget,$png2);
    }

    // creates a tEXt chunk with given key and text (iso8859-1)
    // ToDo: check that key length is less than 79 and that neither includes null bytes
    function phpTextChunk($key,$text) {
        $chunktype = "tEXt";
        $chunkdata = $key . "\0" . $text;
        $crc = pack("N", crc32($chunktype . $chunkdata));
        $len = pack("N",strlen($chunkdata));
        return $len .  $chunktype  . $chunkdata . $crc;
    }

    // inserts chunk before IEND chunk (last 12 bytes)
    function addPngChunk($chunk,$png) {
        $len = strlen($png);
        return substr($png,0,$len-12) . $chunk . substr($png,$len-12,12);
    }

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...