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')