Clean解决方案可在创建的PNG图像上设置DPI


Clean solution to set DPI on created PNG images

我想在网站上使用PHP创建PNG图像。这些应按规定的比例打印。所以我想直接使用PHP设置图像的DPI值。不幸的是,我没有找到任何函数调用。

是否有任何功能可以设置/更新PNG文件的元数据?也许其他解决方案更合理,比如使用带有CSS样式表的HTML包装器进行打印,该样式表从外部定义了分辨率。但我更喜欢"直接在图像上"的方法。。。

PNG可以包含任意标头。如果您查看PNG规范,您可以将tEXt块(称为块)添加到给定的PNG中。有关tEXT块的更多信息,请参见规范的4.2.3节。

例如,Adobe Photoshop在其PNG中添加了元XML。我不确定GD是否支持这一点,但我会从那里开始。这绝对是可能的。

下面是一些处理解析PNG块的PHP代码。它可能会引导你朝着正确的方向前进。http://code.svn.wordpress.org/imagelibs/libpng.php

这是一个PNG文本编辑器的屏幕截图,显示了Photoshop生成的XML。https://stackoverflow.com/a/14356339/278976

pHY区块(物理分辨率)允许您设置DPI(实际上是按米像素,但这只是一个单位转换)。当然,PNG阅读器可能会忽略它

PHP不包括(AFAIK)对读取/写入完整PNG元数据的支持,您必须自己完成,例如

最简单的方法是使用ImageMagick,正如这个答案中所建议的那样。如果你想在纯PHP中设置PNG分辨率,你可以看看我对类似问题的回答。