350

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

動作しない Image Magick コマンドの例は次のとおりです。

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

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

ありがとう!

4

16 に答える 16

457
-background white -alpha remove -alpha off

例:

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

whiteお好きな色に自由に交換してください。Imagemagickのドキュメントには、-alpha remove操作について次のように記載されています。

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

于 2011-12-08T20:53:14.840 に答える
300

これは私のために働く:

convert -flatten img1.png img1-white.png

ドキュメント参照:

于 2010-02-24T00:27:05.607 に答える
45

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

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

透明な画像に背景を適用して平坦化するには、まず背景を適用してから平坦化します。逆は効かない。

$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png
于 2011-06-06T15:13:09.787 に答える
7

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手法を使用すると、複数の画像が生成され、それぞれの透明度が削除されます。

于 2016-06-22T16:37:48.307 に答える
3

「画像マジック」よりも「グラフィックマジック」をインストールするという私の決定には、いくつかの荒いエッジがあるようです.本物の古い「画像マジック」を再インストールすると、上記のコマンドは完全にうまく機能します.

edit、ずっと後 — 最近の 1 つで、「グラフィックスの魔法」がこの問題を修正したかどうかを確認します。

于 2010-02-24T00:21:49.883 に答える
1

この質問と回答は本当に役に立ちましたが、多くのファイルに対してそれを行う必要がありました。したがって、1 つのフォルダーに複数の画像 (PNG 画像) があり、すべてに対してそれを実行したい場合:

find ./ -name "*.png" -exec convert {} -flatten {} \;
于 2018-09-12T15:52:19.020 に答える
0

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

convert in.png -background white -alpha off out.png
于 2014-09-09T15:41:49.460 に答える
0

これにより、2番目の上に透明度のある1番目を配置するだけの画像が作成されます

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

最初にこの投稿でヒントを見つけました

于 2014-06-30T18:46:27.157 に答える