PillowでPNGファイルを変換するときの背景処理


press
PillowでPNGファイルを変換するときの背景処理

PillowでPNGファイルを変換するときの背景処理

PillowでPNGファイルをJPGに変換するときに、背景が透過のファイルを変換すると透過部分が黒くなったり、不自然な途切れ方をしたりといった時の対処方法です。

開発環境

$ python -V
Python 3.7.0

$ tree
├── base.png
└── convert.py

コード

from PIL import Image

img_path = 'base.png'
new_img_path = 'new.jpg'

img = Image.open(img_path).convert("RGB")
img.save(new_img_path, 'JPEG', quality=100, optimize=True)

元々のコードです。このコードだと背景が透過の画像を変換すると背景部分の表示が不自然になってしまいます。

from PIL import Image

img_path = 'base.png'
new_img_path = 'new.jpg'

img = Image.open(img_path)
img.load()
background = Image.new("RGB", img.size, (255, 255, 255))
background.paste(img, mask=img.split()[3])
background.save(new_img_path, "JPEG", quality=100)

背景が不自然にならないように元となる画像と同じサイズの画像(背景画像)を生成して、その上に元の画像を合成することで背景の処理をしています。

解説

from PIL import Image
モジュールを読み込む

img_path = 'base.png'
new_img_path = 'new.jpg'
元画像と変換後の画像のファイル名を指定

img = Image.open(img_path)
元画像を開く

img.load()
元画像を読み込む

background = Image.new("RGB", img.size, (255, 255, 255))
元画像と同じサイズの合成用背景画像を生成

background.paste(img, mask=img.split()[3])
背景画像の上に元画像を合成

background.save(new_img_path, "JPEG", quality=100)
合成した画像を保存


当ブログは、群馬県でPython / Djangoを中心にウェブアプリケーションを開発している株式会社ファントムが運営しています。

投稿についてのお問い合わせ




    Show Comments (0)

    Comments

    Related Articles

    Django

    pandasで読み込んだCSVの値がNaNだったときの対処方法

    DjangoのWEBプリケーションでCSVをpandasで読み込んでforで一行ずつループ処理をしたところ、毎回決まったところで決まったエラーが出たのでPyCharmのデバッグ機能を使って原因を調べた内容です。 プログラ […]

    Posted on by press
    Python

    名前に現在時刻を入れたファイルが連番かどうか判定(前半)

    名前に現在時刻を入れたファイルが連番かどうか判定(前半) なにかアクションがあった際に生成されるファイル名に現在時刻が入ったファイルが、連番になっているかどうかを判別して連番になっていたらまとめてリスト化する方法です。手 […]

    Posted on by press