J'essaie de convertir png en jpeg en utilisant un oreiller. J'ai essayé plusieurs scripts sans succès. Ces 2 semblaient fonctionner sur de petites images png comme celle-ci.
Premier code:
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")
Deuxième code:
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)
Mais si j'essaye de convertir une image plus grande comme celle-ci
je suis en train
Traceback (appel le plus récent en dernier):
Fichier "png_converter.py", ligne 14, dans
fichier "/usr/lib/python2.7/dist-packages/PIL/Image.py", ligne 1328, en copie
self.im.paste (im, box, mask.im) ValueError: masque de transparence incorrect
Qu'est-ce que je fais mal?
Vous devriez utiliser la méthode convert ():
from PIL import Image
im = Image.open("Ba_b_do8mag_c6_big.png")
rgb_im = im.convert('RGB')
rgb_im.save('colors.jpg')
plus d'infos: http://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.Image.convert
Le problème avec cette image n’est pas qu’elle est grande, c’est que ce n’est pas du RVB, c’est précisément une image d’index .
Voici comment je l'ai converti à l'aide du 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)
Ajoutez donc une vérification du mode de l'image dans votre code:
if not im.mode == 'RGB':
im = im.convert('RGB')
Vous pouvez convertir l'image ouverte en RVB, puis l'enregistrer dans n'importe quel format. Le code sera:
from PIL import Image
im = Image.open("image_path")
im.convert('RGB').save("image_name.jpg","JPEG") #this converts png image as jpeg
Si vous voulez une taille personnalisée de l'image, redimensionnez-la simplement en l'ouvrant de la manière suivante:
im = Image.open("image_path").resize(x,y)
puis convertir en RVB et enregistrez-le.
Le problème avec votre code est que vous collez le png dans un bloc RVB et que vous l'enregistrez au format jpeg par codage en dur. vous ne convertissez pas réellement un png en jpeg.
si vous voulez convertir avec redimensionner, essayez ceci,
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')
thats it .. votre image redimensionnée et convertie sera stockée au même endroit