web-dev-qa-db-ja.com

PNG画像の透明度を白い背景に置き換える

透明度のあるPNG画像がいくつかあります。画像レイヤーが白い背景に合成されたバージョンを作成する必要があります。 Image Magickの「変換」操作でさまざまなことを試しましたが、何も起こらないか、エラーが発生します。アーティファクトが必要ないので、中間のJPGフォームには行きたくありません。もちろん、GimpやPhotoshopなどでこれを行うのは簡単ですが、これらの多くが存在するため、コマンドラインからスクリプトを作成したいのです。

動作しないImage Magickコマンドの例:

convert img1.png -background white -flatten img1-white.png

その結果、エラーが発生します。

ありがとう!

251
Pointy

これは私のために働く:

convert -flatten img1.png img1-white.png

ドキュメントの参照:

216
remosu
-background white -alpha remove -alpha off

例:

convert image.png -background white -alpha remove -alpha off white.png

whiteを自由に他の色に置き換えてください。 Imagemagickのドキュメントでは、 -alpha remove 操作について次のように述べています。

この操作は簡単で高速であり、余分なメモリの使用や、代替の透明度除去技術に関連する可能性のある他の副作用を必要とせずに作業を行います。 したがって、画像の透明度を削除するための好ましい方法です。

310
Rok Kralj

ImageMagickで画像を平坦化し、背景画像を適用するのは簡単です

ただし、コマンドの順序は非常に重要です

背景を透明画像に適用して平坦化するには、まず平坦化するよりも背景を適用します。その逆は機能しません。

$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png
44
acpmasquerade

私のために働いた唯一のものは、すべての答えのミックスでした:

convert in.png -background white -alpha remove -flatten -alpha off out.png
23
db0

-flattenをmogrifyのクロップおよびサイズ変更と組み合わせて使用​​してもまったく機能しないため、-flattenを使用すると完全に怒ってしまいます。公式で私にとって正しい方法は、アルファチャネルを「削除」することです。

-alpha remove -alpha off(JPGでは不要)

ドキュメントを参照してください: http://www.imagemagick.org/Usage/masking/#remove

10

ディレクトリ内のすべてのフォルダの同じ画像を透明ではなく白に置き換える方法は次のとおりです。

mogrify -background white -flatten */*.png

10
Julian

ImageMagick使用ガイドAlpha Remove セクションは、-alpha removeオプションの使用を提案しています。例:

convert in.png  -background white  -alpha remove  out.png

...選択した-background色を使用します。

ガイドの状態:

この操作は簡単で高速であり、余分なメモリの使用や、代替の透明度除去技術に関連する可能性のある他の副作用を必要とせずにジョブを実行します。したがって、これは画像の透明度を除去する好ましい方法です。

さらに注記を追加します。

透明度が「削除」されている間、アルファチャンネルはオンのままですが、完全に不透明になります。アルファチャネルが不要になった場合は、アルファオフを使用して無効にすることができます。

したがって、アルファチャネルが必要ない場合は、-alpha offオプションを追加して、出力画像のサイズを小さくすることができます。例:

convert in.png  -background white  -alpha remove  -alpha off  out.png

画像から透明度を削除する セクションで説明されている、透明度を削除するためによく使用される他のテクニックの詳細があります。

そのセクションには、透明性を削除するための手法としての-flattenの使用に関する重要な注意事項が記載されています。

ただし、基本的に「-flatten」演算子は複数の画像を単一の画像にマージするように設計されているため、これは「mogrify」または複数の画像のシーケンスでは機能しません。

したがって、一度に複数の画像を変換する場合は、 PDFファイルからサムネイルを生成すると、-flattenは必要な処理を行いません(すべてのページのすべての画像を1つの画像に統合します)。一方、-alpha removeテクニックを使用しても、複数の画像が生成され、各画像の透明度が削除されます。

6
Gary

これはあなたの質問に対する正確な答えではありませんが、アルファチャネルを削除する方法を見つけようとしているときにあなたの質問を見つけたので、ここにこの答えを追加することにしました。

Imagemagickを使用してアルファチャネルを削除する場合は、次のコマンドを使用できます。

mogrify -alpha off ./*.png
5
FreeNickname

コマンドが正しいように見えるため、問題はPNG()のサポートが欠落していることが原因である可能性があります。 convert -list configureで確認するか、次のことを試してください。

Sudo yum install libpng libpng-devel
5
Alastair

「image magick」の上に「graphics magick」をインストールするという私の決定には、いくつかの大雑把なエッジがあります。

編集、しばらくして—これらの日のうちの1つは、「graphics magick」がこの問題を修正したかどうかを確認します。

3
Pointy

-alpha background-flattenの両方、または-fillのいずれかが必要でした。

背景が透明で、中央に赤い点がある新しいPNGを作成しました。

convert image.png -background green -alpha off green.png失敗:背景が黒の画像を生成しました

convert image.png -background green -alpha background -flatten green.pngは正しい緑色の背景の画像を作成しました。

もちろん、image.pngと名前を変更した別のファイルでは、何もできませんでした。そのファイルでは、透明ピクセルの色が「#d5d5d5」であることがわかったため、その色を緑で塗りつぶしました。

convert image.png -fill green -opaque "#d5d5d5" green.pngは透明なピクセルを正しい緑に置き換えました。

2
McNulty

実際にファイルからアルファチャネルを削除するには、 alpha off オプションを使用します。

convert in.png -background white -alpha off out.png
0
Nick Dowell

私は本当に私を助けるこの質問と回答を見ましたが、その後、私は多くのファイルに対してそれを行う必要があったので、1つのフォルダに複数の画像(PNG画像)があり、すべてのためにそれをしたい場合:

find ./ -name "*.png" -exec convert {} -flatten {} \;
0
talsibony

-alphaは削除され、-alphaは削除されません!アイコンにアルファチャネルがあると、iOSアプリストアのアップロードが失敗します!!

方法は次のとおりです。mogrify -alpha off * .png

0
railsfanatic

これは、2番目の上に透明度を持つ1番目を配置するだけの画像を作成します

composite -gravity center ImgWithTransp.png BackgroundSameSizeOfImg.png ResultImg.png

もともと この投稿 のヒントを見つけました

0
Aquarius Power