3

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

所以我想知道,有没有办法使用 PHP 来检测图像是否是交错的,我可以选择是否处理它。

多谢!

4

2 回答 2

11

您还可以采用低级方法 - 无需加载完整图像,或使用额外的工具或库。如果我们查看规范,我们会看到“隔行扫描”标志只是 iHDR 块的第 13 个字节,所以我们必须从签名中跳过 8 个字节,加上 iHDR 块标识符+长度的 8 个字节,再加上 12 个字节块的...这给出了要跳过的 28 个字节,如果下一个字节为 0,则图像不是隔行扫描的。

该实现只需要 4 行代码:

function isInterlaced( $filename ) {
   $handle = fopen($filename, "r");
   $contents = fread($handle, 32);
   fclose($handle);
   return( ord($contents[28]) != 0 );
}

顺便说一句,您确定要使用隔行扫描 PNG 吗?(参见例如

于 2013-01-09T15:00:01.137 回答
0

我认为 ImageMagick 可以解决您的问题。

http://php.net/manual/en/imagick.identifyimage.php

不知道是否返回了所有属性,但是如果您查看 ImageMagick 工具文档,您会发现它们可以发现图像是否是隔行扫描的。

http://www.imagemagick.org/script/identify.php

如果没有安装 ImageMagick 扩展,您可以通过 PHP 运行 ImageMagick 命令并解析“Interlace”参数的输出。

于 2013-01-09T13:29:49.053 回答