Я пытаюсь конвертировать 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
Что я делаю не так?
Вы должны использовать 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
Вопрос с этой картинкой это'т, что это's большие, это что это'т РГБ, в частности, что он'ы в виде индексного изображения.
Здесь's, как я сконвертировал его с помощью командной консоли:
>>> 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')
Вы можете преобразовать открытое изображение в 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.
если вы хотите конвертировать вместе с изменением размера, то попробуйте этот,
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')
это так.. ваши размеры и конвертировать изображения будут храниться в одном месте