2011-07-19 17 views
9

Imagick PHP拡張機能を使用して、画像が透明かどうかを検出できます。PHP imagickで透明度を検出する

私がしてきた幸運は、exec()/その他のコマンドを実行し、ImageMagickコマンドラインツールを使ってこれを実現することです。ここに私の意味は次のとおりです:

exec("identify -verbose example_transparent_image.png | grep \"Alpha\"", $output); 
$is_transparent = !empty($output) ? true : false; 

ロジックは単純です。問題の画像を徹底的にチェックします。出力にアルファ情報が含まれている場合は、透明性が使用されます。

PHP imagick拡張モジュールがこれをコマンドの1つとして持っているようですが、ドキュメンテーションの不足が私を殺しています。毎回このようなチェックをしなければならないのは馬鹿馬鹿しいようです。

答えて

9

ああ、(私が思う)解決しました。 Imagickには、getImageAlphaChannel()関数があります。この関数は、アルファ情報が含まれている場合はtrueを、そうでない場合はfalseを返します。

ImageMagick 6.4.0以降がインストールされていることを確認してください。

http://www.php.net/manual/en/function.imagick-getimagealphachannel.php

+1

私はこの正確な問題に直面したので、私はidentifyimageとgetimagealphachannelの両方を使いました。 Identimimageは単に十分な情報を提供しませんが、getimagealphachannelはうまく機能します。理論的には、getImageAlphaChannel()はALPHACHANNEL定数を提供していますが、ドキュメントはこの点で率直に言ってゴミです。 JPGの場合は「0」、アルファを含むPNGの場合は「1」、アルファのない場合は32ビットの場合は「0」となります。基本的に、完全に期待される結果。 これは現在の10ヶ月前の質問/回答ですが、2セントで追加する価値があると思いました。 –

0

このことについては何ですか?

substr((new Imagick($FILE))->identifyImage()['type'], 0, -5) == 'Alpha' 

documentation of identifyImageをご覧ください。関数出力の不足している文書に気づくでしょう。これはtypeは画像の種類(sourceを比較)を特定

identify -verbose $FILE (from the imagick package) 

だけ解析されたバージョンです。 imagickMagickTypeOptions配列の値を返します。hereと定義されています。この配列には、カラーパレットにアルファが含まれている場合は、-Alpha-Matteのバージョンが含まれています。

理論的には、このようなパレットを使用せずに画像を保存することができますが、この場合はすべての適切なプログラマが非アルファ版に切り替える必要があります。しかし、偽陽性は可能ですが、珍しいはずです。

また、私は、配列が一定のすべての画像の種類に別の名前(-Alpha-Matteを持つ2つのエントリがあることのように定義されているために-Matte画像の種類をチェックしません )、-Alphaが最初に来ると、この名前がこの画像タイプに対して返されます。

+0

いくつかの説明を追加してください。例えば、ドキュメントへのリンクをお願いしますか? –

関連する問題