我正在使用PIL将使用Django上传的透明PNG图像转换为JPG文件.输出看起来很糟糕.

Image.open(object.logo.path).save('/tmp/output.jpg', 'JPEG')
Run Code Online (Sandbox Code Playgroud)
要么
Image.open(object.logo.path).convert('RGB').save('/tmp/output.png')
Run Code Online (Sandbox Code Playgroud)
两种方式,生成的图像如下所示:

有没有办法来解决这个问题?我想要有透明背景的白色背景.
感谢很棒的答案,我想出了以下函数集合:
import Image
import numpy as np
def alpha_to_color(image, color=(255, 255, 255)):
"""Set all fully transparent pixels of an RGBA image to the specified color.
This is a very simple solution that might leave over some ugly edges, due
to semi-transparent areas. You should use alpha_composite_with color instead.
Source: http://stackoverflow.com/a/9166671/284318
Keyword Arguments:
image -- PIL RGBA Image object
color -- Tuple r, g, b (default 255, 255, 255)
""" …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用枕头将png转换为jpeg.我试过几次没有成功.这两个似乎适用于像这样的小png图像.
第一个代码:
from PIL import Image
import os, sys
im = Image.open("Ba_b_do8mag_c6_big.png")
bg = Image.new("RGB", im.size, (255,255,255))
bg.paste(im,im)
bg.save("colors.jpg")
Run Code Online (Sandbox Code Playgroud)
第二个代码:
image = Image.open('Ba_b_do8mag_c6_big.png')
bg = Image.new('RGBA',image.size,(255,255,255))
bg.paste(image,(0,0),image)
bg.save("test.jpg", quality=95)
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试转换像这样的更大的图像
我越来越
Traceback(最近一次调用最后一次):
文件"png_converter.py",第14行,in
bg.paste(image,(0,0),image)文件"/usr/lib/python2.7/dist-packages/PIL/Image.py",第1328行,粘贴
self.im.paste(im,box,mask.im)ValueError:错误的透明度掩码
我究竟做错了什么?
如何用指定的背景颜色替换任何图像(png,jpg,rgb,rbga)的alpha通道?它还必须适用于没有Alpha通道的图像.
我查看了以下链接以了解如何转换PNG为JPG:
转换按预期工作,但是当图像颜色本身不是黑色时!我有以下图片:

代码是:
im.convert('RGB').save('test.jpg', 'JPEG')
Run Code Online (Sandbox Code Playgroud)
它使整个画面变黑。我应该如何以正确的格式和颜色转换这个 PNG?颜色可以是从黑色到白色的任何颜色。