貼り付ける画像がすでに透過 png になっているなら、putalpha() は不要です。
img.paste(watermark, (50, 50), watermark)
でそのまま貼り付ければよいです。
python
1from PIL import Image
2
3img = Image.open("sample.jpg").convert("RGBA")
4watermark = Image.open("watermark.png").convert("RGBA")
5
6# 必要であれば、ウォーターマークをリサイズする
7watermark.thumbnail((500, 500))
8
9# ウォーターマークを貼り付ける
10img.paste(watermark, (50, 50), watermark)
11img
追記
このサイトの4番目のように透過画像の不透明度を操作したかったのですがうまくいきませんでした。
であれば、putalpha() で一律にアルファチャンネルを同じ値にすると、透明だった画素まで変更されてしまうため駄目です。
アルファチャンネルが0でない画素のみ、アルファチャンネルを変更するという条件分岐が必要です。
こういう操作は numpy のほうが楽なので、一旦 numpy にしてアルファチャンネルが0でない画素だけ変更したあと、また PIL.Image に戻せばよいと思います。
python
1from PIL import Image
2
3img = Image.open("sample.jpg").convert("RGBA")
4watermark = Image.open("watermark.png").convert("RGBA")
5
6# 必要であれば、ウォーターマークをリサイズする
7watermark.thumbnail((500, 500))
8
9# numpy のほうが操作しやすいので、numpy に一旦する
10watermark = np.array(watermark)
11alpha = 30 # 変更後のアルファチャンネルの値
12watermark[watermark[..., 3] != 0, 3] = alpha
13watermark = Image.fromarray(watermark)
14
15# ウォーターマークを貼り付ける
16img.paste(watermark, (50, 50), watermark)
17img
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/10 04:08
2020/09/10 04:18