何百もの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」パラメーターの出力を解析できます。