32

シナリオ

.pngアルファ透明度のある画像を として保存し、アルファ透明度のない画像をとして保存したいと思います.jpg(元の形式が.pngまたはであっても.gif)。ImageMagick を使用して画像にアルファ透明度があるかどうかを検出するにはどうすればよいですか?

4

6 に答える 6

36

ImageMagik コマンド:

identify -format '%[channels]' foo.png 

rgbaまたはrgb、アルファチャンネルがある場合とない場合をそれぞれ印刷します。

実際には透過性を持たないデータのないアルファ チャネルが存在する可能性がありますが、それはもう少し複雑です。

于 2010-04-05T22:17:46.750 に答える
29

画像が実際に透明であることを確認したい場合... (使用されていない可能性のあるアルファ チャネルだけでなく)

次のコマンドを使用します。

convert some_pic.png -verbose info:

(はい、:コマンドの最後に a があります)

かなり冗長です。チャネル リストを探します。

(...)
Channel depth:
  red: 16-bit
  green: 16-bit
  blue: 16-bit
Channel statistics:
(...)

この例では、原色ごとに 1 つずつ、合計 3 つのチャネルがあります。しかし、アルファ版ではありません。したがって、この画像は透明ではありません。

ただし、次のような出力を取得することもできます。

(...)
Channel depth:
  red: 16-bit
  green: 16-bit
  blue: 16-bit
  alpha: 1-bit
Channel statistics:
(...)

ここにアルファチャンネルがあります。ただし、これは画像が透明であることを証明するものではありません。それはそうかもしれないと言っているだけです。コマンドの出力で、アルファ チャネルに関する情報を探します。

(...)
  Alpha:
    min: 255 (1)
    max: 255 (1)
    mean: 255 (1)
    standard deviation: 0 (0)
    kurtosis: 0
    skewness: 0
(...)

この例では、アルファは画像が不透明であることを示しています: min= max= 1 (1 = 不透明、0 = 透明)。そのため、画像にアルファ チャネルがある場合でも、ユーザーには不透明な画像が表示されます。

これを取得することもできます:

(...)
  Alpha:
    min: 95 (0.372549)
    max: 212 (0.831373)
    mean: 111.187 (0.436028)
    standard deviation: 19.5635 (0.0767196)
    kurtosis: 7.52139
    skewness: -2.80445
(...)

今度はmin= 0.372549 です。これは、一部のピクセルが部分的に透明であることを意味します。meanも低い。画像の大部分は透明度を使用しているようです。

達成したいチェックのタイプ (完全な不透明、「ほぼ不透明」など) に応じてminmeanをチェックする必要standard deviationがあります。

min注: 最初に行ったように、などの整数値をチェックしたくなるかもしれませんmean。やっぱり より扱い95やすい0.372549。このルートを選択する場合は、アルファ チャネルの深度に注意してください。8 ビットの場合は 255 が最大で、「不透明」を意味します。16 ビットの場合、最大値は 65535 になり、255 は「ほぼ透明」を意味します。常に0から1の範囲の括弧内の浮動小数点数を確認してください。

処理する多くの画像にアルファ チャネルがまったくないと思われる場合は、最初に次のコマンドを実行すると便利です。

identify -format '%[channels]' some_pic.png

ダンプする場合:

rgba

アルファ チャネル (a出力に ) があり、 などconvertをチェックするために使用する必要があります。これら 2 つのコマンドのベンチマークは行っていませんが、.minconvertidentifyconvert

于 2013-09-20T13:40:44.423 に答える
7
identify -format %A some_pic.png

True画像にアルファ チャネルが含まれている場合に返されます。

于 2013-12-04T20:17:56.217 に答える
2

アルファ透明度が実際に使用されていることを確認したい場合は、すべてのピクセルを反復処理し、色情報を取得して透明かどうかを確認する唯一の解決策です。大きな画像の場合、これは非常に遅くなるため、最適化として、最初に画像のサムネイル (20x20 としましょう) を作成し、次にサムネイルのピクセルを確認します。これは私にとって良い解決策でした。

于 2012-01-24T11:00:22.450 に答える