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


294

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

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

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

これはエラーになります。

ありがとう!


私の特定のケースでは、PNGの透明レイヤーが(Apache)FOプロセッサーを通過してPDF / Aを作成するときに競合しました。PDF / Aは透明化を許可しません。私が使用したハックは、代わりにJPGを使用することです。
Wivani 2014年

3
「これはエラーになります。」エラーメッセージは何ですか?
Aaron McDaid

そのコマンドは正常に動作するはずです。そうでない場合は、Imagemagickまたはlibpngのインストールにバグがあるか、どちらかのバージョンが古すぎる可能性があります。Imagemagickおよびlibpngのバージョンは何ですか?
fmw42 2018

回答:


255

これは私にとってはうまくいきます:

convert -flatten img1.png img1-white.png

ドキュメント参照:


3
どういうわけか私にはうまくいきません... "-transparent-color white"を試しましたが、例外/警告が出ました。
William Niu

1
-backgroundも白に設定する必要があることがわかりました。また、不足していたcolors.xmlもダウンロードする必要がありました。
William Niu

9
以下の私の答えをチェックしてください。これから2年後に追加されました。
Rok Kralj

42
複数ページのドキュメントを変換しないでください-flatten。ページを1ページに統合します。
Tim S.

8
フォルダ内のすべてのファイルに対して実行するmogrify -flatten *.png場合は、この方法で実行できます。念のため、バックアップを行うことを忘れないでください。詳細はこちら:imagemagick.org/script/mogrify.php
troyane

372
-background white -alpha remove -alpha off

例:

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

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

この操作は単純で高速であり、追加のメモリを使用したり、他の透明度の除去手法に関連する可能性のある他の副作用を発生させたりすることなく、作業を行います。したがって、これは画像の透明度を削除するための好ましい方法です。


3
それはそう-background white必要とされていません(それはおそらく他の色かかわらのためです)。
Skippy le Grand Gourou 2015年

5
@SkippyleGrandGourou:PNGの透明度の代替色が常に白であるとは限らないため、これが必要です。
Rok Kralj、2015年

3
受け入れられた回答(複数のレイヤーの場合は正しいことを行わない場合)よりも
優れている

5
結果の画像には、まだアルファチャネルがあります。空になりますが、まだ存在します。チャネルを完全に削除するには、を追加し-alpha offます。
josch 2018年

2
動作しません。背景が透明で中央に赤い点がある新しいPNGを作成しました。指定した色に関係なく、常に黒の背景が生成されました。convert image.png -background white -alpha off white.png背景が黒い画像を作成しました。convert image.png -background "#00ff33" -alpha off 00ff33.png黒の背景を生成しました
McNulty 2018

46

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

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

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

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

何らかの理由で、これは私にとってはうまくいきました。元の試みがうまくいかなかった理由がわかりません。
アンソニー

23

私にとってうまくいったのは、すべての答えの組み合わせでした:

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

4
それはうまくいきました。私は実際には白以外の色が必要でしたが、白の... -background "#010203" ...代わりに使用できます。
Alexis Wilke、2015年

ここでは、ディレクトリ内のすべてのフォルダ内の同じ画像を置き換える方法を示しますmogrify -background white -flatten */*.png
Julian

-alpha remove私にとってそれは何をしたか
Stefan Dragnev

13

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

mogrify -background white -flatten */*.png


10

-flattenを使用すると、-grizeをmogrify作物と組み合わせてサイズ変更しても機能しないため、完全に腹が立ちました。公式で、私にとっては正しい方法は、アルファチャネルを「削除」することです。

-alpha削除-alphaオフ(JPGでは不要)

ドキュメントを参照:http : //www.imagemagick.org/Usage/masking/#remove


では、どのようにしてコマンドになるのでしょうか?これはここでは機能しませんでした:convert imgWithTranspBkg.png -alpha remove -alpha off bkg.jpg resultImg.png
Aquarius Power

アルファを削除したかっただけです。JPGへの変換はそれを行いました。先端をありがとう。
Roger CS Wernersson 2014年

これは私のために働いた上記の唯一の解決策です。これで、iTunesストアは私のイメージに満足しています。
Bill Cheswick、2015年

7

ImageMagick使用ガイドアルファ削除セクションでは、オプションの使用を推奨しています。例:-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」演算子は複数の画像を1つの画像にマージするように設計されているため、これは「mogrify」または複数の画像のシーケンスでは機能しません。

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


5

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

sudo yum install libpng libpng-devel

1
はい、ありがとう; この(古い)問題は、「image magick」のfork / rewrite / whateverである「graphicks magick」のバグでした
Pointy

@先のとがった!好奇心から、問題の実際の原因は何でしたか(1つのバージョンのみでした)?
Alastair 2013

まあ、正確にはわかりません。それは単なるバグでした。私はGraphicks Magickのメンテナーではないので、彼らのコードについての洞察はありません。ある時点でもう一度試す必要があります。
先のとがった

ubuntuにはありませんか?ここにlibpng12-0がありますが、それでも機能しません:(
Aquarius Power

libpng12-0インストールして動作しているUbuntu 13.04を使用しています。これを実行するとpngが表示されますか?convert -list configure | grep \png
Alastair 2014

5

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

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

mogrify -alpha off ./*.png

3

「グラフィックスマジック」を「イメージマジック」の上にインストールするという私の決断は、いくつかの荒削りなようです-私が本物の粗悪な古い「イメージマジック」を再インストールするとき、上記のコマンドは完全にうまくいきます。

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


2

私はどちらかが必要でした:-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 透明なピクセルを正しい緑に置き換えました。


現在のImageMagickでの適切なコマンドは、convert image.png -background green -alpha background -alpha off green.pngor convert image.png -background green -alpha background -alpha remove green.pngまたはconvert image.png -background green -flatten green.png
fmw42

1

非コマンドラインオプション:WindowsペイントでPNGファイルを開き、[保存]をクリックします。


0

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

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

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


0

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

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

1
実際に提供されたリンクは、「画像に添付されているアルファチャネルを実際に削除したり破壊したりするのではなく、チャネルが画像に与える影響をオフにするだけです」と述べています。アルファチャネルを本当に削除するには、私の答えを参照してください。
Rok Kralj、2015年

0

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

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

-1

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

これを行う方法は次のとおりです。mogrify-alpha off * .png

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.