当前位置: 首页 > 面试题库 >

PIL将具有透明度的PNG或GIF转换为JPG,而无需

轩辕庆
2023-03-14
问题内容

我正在使用PIL1.1.7在Python
2.7中制作图像处理器的原型,我希望所有图像都以JPG结尾。输入文件类型将包括透明和不透明的tiff,gif,png。我一直在尝试结合两个脚本,发现1.将其他文件类型转换为JPG和2.通过创建空白的白色图像并将原始图像粘贴在白色背景上来消除透明度。我的搜索被那些寻求产生或保持透明度的人们所困扰,而不是相反。

我目前正在与此:

#!/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:错误的透明蒙版。

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,但是我希望有一个优雅的解决方案我还没有找到。


问题答案:

使背景为RGB,而不是RGBA。当然,删除背景到RGB的以后的转换,因为它已经处于该模式。这对我创建的测试图像很有帮助:

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


 类似资料:
  • 问题内容: 使用PHP将jpg图像转换为gif,png和bmp格式的可能重复项 我有一个PHP表单,该表单允许图像上传和检查以确保图像有效。 但是,我希望所有格式(PNG,JPG,JPEG和GIF)最终在提交后都是PNG。 我该怎么做呢? 问题答案: 然后,您只需要。实际上,它几乎变成了单线: 您将使用文件名,并且显然使用不同的输出文件名。但是图像格式探测本身将变得多余。

  • 我正在将PNG转换为JPG。透明背景默认变为黑色。我需要它是白色的。

  • 问题内容: 我环顾四周,阅读文档,没有找到任何方法或解决方案,所以我在这里问。是否有可用的软件包可用于使用Python将JPG图像转换为PNG图像? 问题答案: 为此,您始终可以使用Python图像库(PIL)。可能还会有其他包/库,但是我之前曾用过它来在格式之间进行转换。 这适用于Windows下的Python 2.7(适用于Python 2.7的Python Imaging Library 1

  • 问题内容: 我是python的新手,尝试使用它将GIF的帧拆分为PNG图像。 这是特定于我正在使用的图像还是我做错了什么? 谢谢! 问题答案: 我认为您没有做错任何事情。在此处看到类似的问题:GIF动画问题。看起来好像调色板信息未正确用于以后的帧。以下对我有用:

  • 问题内容: 如何使用PHP将单个jpg图像转换为3种不同的图像格式gif,png和bmp? 请帮助 问题答案: 首先,使用imagecreatefromjpeg()从文件中创建图像对象。然后,您将该对象转储为不同的格式(例如,使用imagegif()):

  • 问题内容: 嘿,当我从png创建缩略图时,尝试保持png的透明度时遇到麻烦,有人对此有任何经验吗?任何帮助都会很棒,这是我目前正在做的事情: 问题答案: 过去,我已经成功地做到了: 我发现输出图像使用质量更好的比