建议:如果你有固定的iTXt http://www.w3.org/TR/PNG/#11iTXt如果您想要将其添加到图像中,一个快速而肮脏的过程可能是简单地将其插入到原始图像的 IEND 块(12 字节)之前。这应该可行,因为 iTXt 可以放置在图像数据之前或之后。当然,这不会检查块是否已经存在。
这是一个示例代码,使用tEXt
chunk(稍微简单一些),它需要一些改进,但它基本上可以工作:
<?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);
}
?>