PHP测试图像是否隔行扫描

时间:2013-01-09 12:50:37

标签: php image png

我有一个包含数百个PNG文件的文件夹,我想编写一个脚本来使它们全部交错。现在,随着时间的推移,图像将被添加到该文件夹​​,并处理文件夹中的所有图像(无论是隔行扫描还是渐进式)似乎都有点傻。

所以我想知道,有没有办法使用PHP来检测图像是否是隔行扫描的方式我可以选择是否处理它。

谢谢堆!

2 个答案:

答案 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”参数的输出。