2017-04-30 13 views
2

JPEG画像(1600x900)とアルファチャンネル(400x62)のPNGロゴから合成画像を作成しようとしています。ここでPIL:JPG画像の透かしとしてのPNG画像

は、画像魔術で仕事をしてコマンドです:

composite -geometry +25+25 watermark.png original_photo.jpg watermarked_photo.jpg 

今、私はPILで、外部からこのシェルコマンドを起動せずに、Pythonスクリプトに似た何かをしたいと思います。ここ

photo = Image.open('original_photo.jpg') 
watermark = Image.open('watermark.png') 
photo.paste(watermark, (25, 25)) 

問題はアルファチャンネルが完全に無視されていることで、私の透かしがrbga(0, 0, 0, 0)rbga(255, 255, 255, 128)ではなく黒と白であるかのように結果は次のとおりです。ここで

は、私が試したものです。

実際には、PIL docs state:「アルファチャンネルに関して画像を結合する場合は、alpha_composite()を参照してください。」

私はalpha_composite()を見ました。残念ながら、この関数は、両方の画像が同じサイズとモードであることを必要とします。

答えて

7

は最終的に、私はもっと慎重にImage.paste()を読み、これを見つけた:

マスクが与えられた場合、この方法は、マスクによって示された領域のみを更新します。 "1"、 "L" または "RGBA"のいずれかの画像を使用できます(後者の場合、アルファバンドがマスクとして使用されます)。マスクが255の場合、指定されたイメージはそのままコピーされます。マスクが0の場合、現在の値は保持されます。中間値では、2つの画像がアルファチャンネルを含めて一緒にミックスされます。

だから私は、次のことを試してみました:

photo = Image.open('original_photo.jpg') 
watermark = Image.open('watermark.png') 
photo.paste(watermark, (25, 25), watermark) 

そして...それは働きました!

関連する問題