1

3つの画像を結合しようとしています。一番下に表示したい画像は、すべて黒のピクセルを含む 700x900 の画像です。その上に、オフセットが 100,200 の 400x400 の画像を貼り付けたいと思います。その上に、700x900 の画像境界線を貼り付けたいと考えています。画像の境界線の内側は alpha=0 で、周囲は alpha=0 です。これは、直線のエッジがないためです。以下に貼り付けたコードを実行すると、2 つの問題が発生します。

1) アルファ チャネル = 0 の境界画像のどこでも、アルファ チャネルは 255 に設定されており、黒の背景の代わりに白が表示され、画像は境界線を配置しています。

2) 境界線の画像の品質が大幅に低下し、見た目がかなり異なっています。

また、境界線の画像の一部が画像の一部を覆い、境界線を配置しています。そのため、貼り付けている順序を切り替えることはできません。

助けてくれてありがとう。

#!/usr/bin/python -tt

from PIL import ImageTk, Image

old_im2 = Image.open('backgroundImage1.jpg') # size = 400x400
old_im = Image.open('topImage.png') # size = 700x900
new_size = (700,900)
new_im = Image.new("RGBA", new_size) # makes the black image
new_im.paste(old_im2, (100, 200))
new_im.paste(old_im,(0,0))

new_im.show()
new_im.save('final.jpg')
4

1 に答える 1

2

画像について誤解していると思います - ボーダー画像にはどこにでもピクセルがあります。「欠落」ピクセルである可能性はありません。RG、およびBチャネルのようなチャネルであるが、透明度を示すアルファ チャネルを持つイメージを持つことができます。

これを試して:

1.topImage.pngに透明度チャネルがあり、「欠落」させたいピクセルが透明であること (つまり、最大アルファ値を持つこと) を確認します。この方法で再確認できます:

print old_im.mode  # This should print "RGBA" if it has an alpha channel.

2. new_im「RGBA」モードで作成します。

new_im = Image.new("RGBA", new_size) # makes the black image
# Note the "A" --------^

3. 代わりに、次の貼り付けステートメントを試してください。

new_im.paste(old_im,(0,0), mask=old_im)  # Using old_im as the mask argument should tell the paste function to use old_im's alpha channel to combine the two images.
于 2013-08-20T20:25:31.097 に答える