COBAKURA.COM

PillowでPNG画像を扱う時の注意点

pngへ変換時の注意点

pngだった画像をjpegに変換して保存しようとする場合、png画像にAlpha値が含まれていると OSError: cannot write mode RGBA as JPEG のエラーになる。

# pngファイルを開く
image = Image.open("test.png")

### いろいろな処理

# jpegにして保存する → Alpha値がある場合はエラー
buffer = io.BytesIO()
image.save(fp=buffer, format="jpeg", quality=95)

これを回避するには、convertメソッドでRGBに変換しておくと良い。

image = Image.open('test.png').convert('RGB')

pngをjpegに変換する時の背景色を指定する

.convert('RGB') でAlpha値がある場合でもpng→jpegの変換はできるようになるが、透明な背景箇所は黒くなって保存されてしまう。背景色を白などに指定した場合は以下のようにする。

image = Image.open("test.png").convert("RGBA")
# RGBAモードで元画像と同じサイズの画像を作る。白色を指定する。
new_image = Image.new("RGBA", image.size, "#FFF")
# 白色画像に元画像をペーストする。
new_image.paste(image, (0, 0), image)

# 白背景の上に元画像が乗った画像をRGBモードに変換する → jpegで保存時に白色背景になる。
image = new_image.convert('RGB')