PHP将iTXt注释添加到PNG图像

PHP将iTXt注释添加到PNG图像,php,png,Php,Png,我到处都找过这个。我知道可以使用.net中的一些库来完成,但我真的希望我的脚本生成一个标记的图像。原因是我们是一个论坛的主持人,并与一家主题制作公司合作。主题制作公司希望我们能够追踪任何非法发布的主题。我在GCHQ CanYouCrackIt练习中看到了iTXt评论,认为这是保护我们财产的最好、无干扰的方法。一个建议:如果您有一个要添加到图像中的固定块,一个快速而肮脏的过程可以是在原始图像的IEND块12字节之前插入它。这应该是可行的,因为iTXt可以放在图像数据的前面或后面。当然,这并不检查块

我到处都找过这个。我知道可以使用.net中的一些库来完成,但我真的希望我的脚本生成一个标记的图像。原因是我们是一个论坛的主持人,并与一家主题制作公司合作。主题制作公司希望我们能够追踪任何非法发布的主题。我在GCHQ CanYouCrackIt练习中看到了iTXt评论,认为这是保护我们财产的最好、无干扰的方法。

一个建议:如果您有一个要添加到图像中的固定块,一个快速而肮脏的过程可以是在原始图像的IEND块12字节之前插入它。这应该是可行的,因为iTXt可以放在图像数据的前面或后面。当然,这并不检查块是否已经存在

下面是一个示例代码,使用文本块稍微简单一些,它需要一些修饰,但基本上可以工作:

<?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);
    }

?>

ImageMagick似乎能够做到这一点-看,似乎没有现成的PHP解决方案。谢谢你的回答,但是有没有办法添加动态文本,而不是将iTXt从一个图像转换到另一个图像,这就是我认为这段代码正在做的事?@Tommykent1210:文本在这里是动态的,请参阅我的代码的第一行。只是这是文本而不是iTXt,但是如果您真的需要iTXt,那么很容易更改。没有两个输入图像source=original target=final