【问题标题】:Convert png to jpeg using Pillow使用 Pillow 将 png 转换为 jpeg
【发布时间】:2017-09-01 16:15:59
【问题描述】:

我正在尝试使用枕头将 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")

第二个代码:

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)

但如果我尝试转换像这样的更大图像

我来了

Traceback (most recent call last):
  File "png_converter.py", line 14, in <module>
    bg.paste(image,(0,0),image)
  File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1328, in paste
    self.im.paste(im, box, mask.im) ValueError: bad transparency mask

我做错了什么?

【问题讨论】:

  • 你试过this吗?
  • 是的,我做到了,这是第一个例子

标签: python python-3.x image python-imaging-library


【解决方案1】:

从png转换为jpeg的最简单方法(使用枕头)

from PIL import Image
img = Image.open("image.png")
new_img = img.convert('RGB')
new_img.save('image.jpeg')

以特定大小调整大小

from PIL import Image
img = Image.open("image.png").resize((320,320)) #Here (x,y) in pixels
new_img = img.convert('RGB')
new_img.save('image.jpeg')

【讨论】:

    【解决方案2】:

    如果你想在调整大小的同时进行转换,那么试试这个,

    from PIL import Image
    
    img = i.open('3-D Tic-Tac-Toe (USA).png').resize((400,400)) # (x,y) pixels
    img.convert("RGB").save('myimg.jpg')
    

    就是这样..您调整大小和转换后的图像将存储在同一位置

    【讨论】:

      【解决方案3】:

      您可以将打开的图像转换为 RGB,然后您可以将其保存为任何格式。代码将是:

      from PIL import Image
      im = Image.open("image_path")
      im.convert('RGB').save("image_name.jpg","JPEG") #this converts png image as jpeg
      

      如果您想要自定义图像大小,只需在打开时调整图像大小:

      im = Image.open("image_path").resize(x,y)
      

      然后转成RGB并保存。

      您的代码的问题是您将 png 粘贴到 RGB 块中并通过硬编码将其保存为 jpeg。您实际上并没有将 png 转换为 jpeg。

      【讨论】:

      • 所有答案都很好,谢谢,但是您知道如何压缩尺寸吗?
      • 在保存图像时尝试 optimize=True。
      【解决方案4】:

      该图像的问题不在于它太大,而在于它不是 RGB,特别是它是索引图像。

      这是我使用 shell 转换它的方法:

      >>> from PIL import Image
      >>> im = Image.open("Ba_b_do8mag_c6_big.png")
      >>> im.mode
      'P'
      >>> im = im.convert('RGB')
      >>> im.mode
      'RGB'
      >>> im.save('im_as_jpg.jpg', quality=95)
      

      所以在你的代码中添加对图像模式的检查:

      if not im.mode == 'RGB':
        im = im.convert('RGB')
      

      【讨论】:

        【解决方案5】:

        你应该使用 convert() 方法:

        from PIL import Image
        
        im = Image.open("Ba_b_do8mag_c6_big.png")
        rgb_im = im.convert('RGB')
        rgb_im.save('colors.jpg')
        

        更多信息:http://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.Image.convert

        【讨论】:

        • 但它使图像的白色背景变白。有什么办法可以解决。
        • @lifeisshubh 是不是应该把白色转换成黑色?!
        • 我笑得很厉害。 @lifeisshubh 您的意思是“它使图像的白色背景变黑了吗?”
        • @frank 我的意思是你写的。
        • 据我记得它已经解决了。但是已经很长时间了,我既没有我正在使用的那个系统,也没有那个代码。时间会淡化一切。
        猜你喜欢
        • 1970-01-01
        • 2011-01-18
        • 2019-11-10
        • 2011-11-28
        • 1970-01-01
        • 2011-09-09
        • 2012-12-22
        • 2022-08-22
        • 2010-10-02
        相关资源
        最近更新 更多