使用 Pillow 将 png 转换为 jpeg
Convert png to jpeg using Pillow
我正在尝试使用 pillow 将 png 转换为 jpeg。我试过几个纸条都没有成功。这 2 个似乎适用于像这样的小 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
我做错了什么?
您可以将打开的图像转换为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。
你应该使用 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
该图像的问题不在于它太大,而在于它不是 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')
如果您想在调整大小的同时进行转换,请试试这个,
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')
就是这样..您调整大小和转换后的图像将存储在同一位置
我正在尝试使用 pillow 将 png 转换为 jpeg。我试过几个纸条都没有成功。这 2 个似乎适用于像这样的小 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
我做错了什么?
您可以将打开的图像转换为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。
你应该使用 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
该图像的问题不在于它太大,而在于它不是 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')
如果您想在调整大小的同时进行转换,请试试这个,
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')
就是这样..您调整大小和转换后的图像将存储在同一位置