首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PIL将透明的PNG或GIF转换为不透明的JPG

PIL将透明的PNG或GIF转换为不透明的JPG
EN

Stack Overflow用户
提问于 2011-10-27 11:34:16
回答 4查看 34.9K关注 0票数 17

我正在使用PIL1.1.7在Python2.7中构建一个图像处理器的原型,我希望所有的图像最终都是JPG格式的。输入文件类型将包括tiff、gif、png以及透明和不透明。我一直在尝试组合两个脚本,我发现这两个脚本1.将其他文件类型转换为JPG,2.通过创建一个空白的白色图像并将原始图像粘贴到白色背景上来消除透明度。我的搜索充斥着寻求产生或保持透明度的人,而不是相反的人。

我目前正在做这个工作:

代码语言:javascript
复制
#!/usr/bin/python
import os, glob
import Image

images = glob.glob("*.png")+glob.glob("*.gif")

for infile in images:
    f, e = os.path.splitext(infile)
    outfile = f + ".jpg"
    if infile != outfile:
        #try:
        im = Image.open(infile)
        # Create a new image with a solid color
        background = Image.new('RGBA', im.size, (255, 255, 255))
        # Paste the image on top of the background
        background.paste(im, im)
        #I suspect that the problem is the line below
        im = background.convert('RGB').convert('P', palette=Image.ADAPTIVE)
        im.save(outfile)
        #except IOError:
           # print "cannot convert", infile

这两个脚本单独工作,但当我将它们组合在一起时,我得到了一个ValueError:坏的透明蒙版。

代码语言:javascript
复制
Traceback (most recent call last):
File "pilhello.py", line 17, in <module>
background.paste(im, im)
File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1101, in paste
self.im.paste(im, box, mask.im)
ValueError: bad transparency mask

我怀疑如果我要保存一个没有透明度的PNG,我可以打开那个新文件,并将其重新保存为JPG,然后删除写入磁盘的PNG,但我希望有一个优雅的解决方案,但我还没有找到。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-27 12:15:17

将背景设置为RGB,而不是RGBA。当然,删除后面的背景到RGB的转换,因为它已经处于该模式。这对我创建的一个测试映像很有效:

代码语言:javascript
复制
from PIL import Image
im = Image.open(r"C:\jk.png")
bg = Image.new("RGB", im.size, (255,255,255))
bg.paste(im,im)
bg.save(r"C:\jk2.jpg")
票数 31
EN

Stack Overflow用户

发布于 2012-01-04 08:29:55

代码语言:javascript
复制
image=Image.open('file.png')
non_transparent=Image.new('RGBA',image.size,(255,255,255,255))
non_transparent.paste(image,(0,0),image)

关键是使蒙版(用于粘贴)成为图像本身。

这应该适用于那些具有“软边缘”的图像(其中alpha透明度被设置为不是0或255)

票数 8
EN

Stack Overflow用户

发布于 2011-10-27 12:12:34

下面的代码适用于我的this image

代码语言:javascript
复制
f, e = os.path.splitext(infile)
print infile
outfile = f + ".jpg"
if infile != outfile:
    im = Image.open(infile)
    im.convert('RGB').save(outfile, 'JPEG')
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7911451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档