我有一个包含数百个PNG文件的文件夹,我想编写一个脚本来使它们全部交错。现在,随着时间的推移,图像将被添加到该文件夹,并处理文件夹中的所有图像(无论是隔行扫描还是渐进式)似乎都有点傻。
所以我想知道,有没有办法使用PHP来检测图像是否是隔行扫描的方式我可以选择是否处理它。
谢谢堆!
答案 0 :(得分:6)
您还可以采用低级方法 - 无需加载完整图像,或使用额外的工具或库。如果我们查看spec,我们会看到“隔行扫描”标志它只是iHDR块的字节13,所以我们必须跳过8 bytes from the signature,加上8字节的iHDR块标识符+长度,加上块的12个字节...这样就可以跳过28个字节,如果下一个字节是0,则图像不会被隔行扫描。
实现只需4行代码:
function isInterlaced( $filename ) {
$handle = fopen($filename, "r");
$contents = fread($handle, 32);
fclose($handle);
return( ord($contents[28]) != 0 );
}
顺便说一句,您确定要使用隔行扫描PNG吗? (见eg)
答案 1 :(得分:0)
我认为ImageMagick可以解决您的问题。
http://php.net/manual/en/imagick.identifyimage.php
不知道是否返回了所有属性,但如果查看ImageMagick工具文档,您会发现他们可以发现图像是否是隔行扫描。
http://www.imagemagick.org/script/identify.php
如果没有安装ImageMagick扩展,你可以通过PHP运行ImageMagick命令并解析“Interlace”参数的输出。