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 に答える