質問: img.size card.paste(img, (0, 0, x, y), img) card.save("test.png", format="png") ``` ### 疑問点・確認点 貼り付けられる元画像と貼り付ける画像の両画像のピクセル値がRGBAタイプならpaste()メソッドの第3引数に第1引数 を充てると透過を反映してくれると思いますが上記のコードでは実現出来ません。 確認したこと--- ・変数card,imgともImageオブジェクトであること ・両変数ともピクセル値は"RGBA"であること ・試行錯誤中にJPEGではマスクImageオブジェクトに対応していないエラーメッセージを見たのでPNG形式にしたこと 上記以外で確認していない箇所はあるでしょうか? ### 画像(追加) 変数card ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/baa87d9d521a4e6d190812f88763015f.png) 変数img ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/4c2572fc4f17952fae45e2e1eea28090.png) 実行後の変数card ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/7b38d5e21dcd9ada48560ebd6b409e57.png)
回答: 文字の画像`name.png`が透過イメージになっていないようです。 ペイントソフト(GIMP)で透過するように編集すると、正常に動作しました。 `Teratail`への画像アップロード時に不透明な画像に変換された可能性もありますので 回答者様の環境でアップ元画像を確認ください。 ``` from PIL import Image card = Image.open("img.png").convert("RGBA") # 犬 img = Image.open("name.png").convert("RGBA") # 文字 print(card.mode, img.mode) #card,img=="RGBA" print(card) print(img) #both variable are Image object x, y = img.size card.paste(img, (0, 0, x, y), img) card.save("test.png", format="png") ``` 透過するようにGIMPで`name.png`を編集 !イメージ説明 実行結果 !イメージ説明 `Python`コードで透過する文字画像を作成し、重ねて描画するサンプルを書いてみました。 ``` from PIL import Image, ImageDraw, ImageFont # 透過する文字画像を作成 img = Image.new('RGBA', (640,480),(0,0,0,0)) # 適当なサイズの透過画像を生成 draw = ImageDraw.Draw(img) font = ImageFont.truetype("arial.ttf", 24) # 適当な大きさのフォントで x,y,max_w = 0,90,0 # 適当な位置から DOCS = 'I am a dog.','As yet I have no name.',"I've no idea where I was born."] for text in DOCS: draw.text((x,y), text, fill=(0,0,0), font=font) w,h = font.getsize(text) max_w = max(max_w, w) y += h img = img.crop((0, 0, max_w, y)) # 画像サイズをテキスト範囲に合わせて調整 img.save('name.png') # 犬の画像にテキスト画像を重ねる card = Image.open("img.png").convert("RGBA") # 犬 #img = Image.open("name.png").convert("RGBA") # 文字 x, y = img.size card.paste(img, (0, 0), img) card.save("test.png") ``` ![イメージ説明