我有一个包含数百个 PNG 文件的文件夹,我想编写一个脚本让它们全部交错。现在,随着时间的推移,图像将被添加到该文件夹中,并且处理文件夹中的所有图像(无论是隔行扫描还是逐行扫描)似乎有点愚蠢。
所以我想知道,有没有办法使用 PHP 来检测图像是否是交错的,我可以选择是否处理它。
多谢!
您还可以采用低级方法 - 无需加载完整图像,或使用额外的工具或库。如果我们查看规范,我们会看到“隔行扫描”标志只是 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 吗?(参见例如)
我认为 ImageMagick 可以解决您的问题。
http://php.net/manual/en/imagick.identifyimage.php
不知道是否返回了所有属性,但是如果您查看 ImageMagick 工具文档,您会发现它们可以发现图像是否是隔行扫描的。
http://www.imagemagick.org/script/identify.php
如果没有安装 ImageMagick 扩展,您可以通过 PHP 运行 ImageMagick 命令并解析“Interlace”参数的输出。