シナリオ
.png
アルファ透明度のある画像を として保存し、アルファ透明度のない画像をとして保存したいと思います.jpg
(元の形式が.png
またはであっても.gif
)。ImageMagick を使用して画像にアルファ透明度があるかどうかを検出するにはどうすればよいですか?
.png
アルファ透明度のある画像を として保存し、アルファ透明度のない画像をとして保存したいと思います.jpg
(元の形式が.png
またはであっても.gif
)。ImageMagick を使用して画像にアルファ透明度があるかどうかを検出するにはどうすればよいですか?
ImageMagik コマンド:
identify -format '%[channels]' foo.png
rgba
またはrgb
、アルファチャンネルがある場合とない場合をそれぞれ印刷します。
実際には透過性を持たないデータのないアルファ チャネルが存在する可能性がありますが、それはもう少し複雑です。
画像が実際に透明であることを確認したい場合... (使用されていない可能性のあるアルファ チャネルだけでなく)
次のコマンドを使用します。
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
も低い。画像の大部分は透明度を使用しているようです。
達成したいチェックのタイプ (完全な不透明、「ほぼ不透明」など) に応じてmin
、mean
をチェックする必要standard deviation
があります。
min
注: 最初に行ったように、などの整数値をチェックしたくなるかもしれませんmean
。やっぱり より扱い95
やすい0.372549
。このルートを選択する場合は、アルファ チャネルの深度に注意してください。8 ビットの場合は 255 が最大で、「不透明」を意味します。16 ビットの場合、最大値は 65535 になり、255 は「ほぼ透明」を意味します。常に0から1の範囲の括弧内の浮動小数点数を確認してください。
処理する多くの画像にアルファ チャネルがまったくないと思われる場合は、最初に次のコマンドを実行すると便利です。
identify -format '%[channels]' some_pic.png
ダンプする場合:
rgba
アルファ チャネル (a
出力に ) があり、 などconvert
をチェックするために使用する必要があります。これら 2 つのコマンドのベンチマークは行っていませんが、.min
convert
identify
convert
identify -format %A some_pic.png
True
画像にアルファ チャネルが含まれている場合に返されます。
アルファ透明度が実際に使用されていることを確認したい場合は、すべてのピクセルを反復処理し、色情報を取得して透明かどうかを確認する唯一の解決策です。大きな画像の場合、これは非常に遅くなるため、最適化として、最初に画像のサムネイル (20x20 としましょう) を作成し、次にサムネイルのピクセルを確認します。これは私にとって良い解決策でした。