Jestem prototypowania procesora obrazu w Pythonie 2.7 przy użyciu PIL1.1.7 i chciałbym, aby wszystkie obrazy zakończyły się w JPG. Typy plików wejściowych będą zawierać tiff, gif, png zarówno z przezroczystością, jak i bez. Próbowałem połączyć dwa skrypty, które znalazłem: 1. przekonwertować inne typy plików na JPG i 2. usunąć przezroczystość, tworząc pusty biały obraz i wklejając oryginalny obraz na białym tle. Moje wyszukiwania są spamowane przez osoby, które chcą wygenerować lub zachować przejrzystość, a nie odwrotnie.PIL Konwersja PNG lub GIF z przezroczystością do JPG bez
Obecnie pracuję z tym:
#!/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
Oba skrypty działają w izolacji, ale jak już je łączyć dostaję ValueError: Bad maską przezroczystości.
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
Podejrzewam, że gdybym zapisać PNG bez przejrzystości mogłem wtedy otworzyć ten nowy plik i ponownie zapisać go jako JPG, PNG i usunąć który został napisany na dysku, ale jestem mając nadzieję, że istnieje eleganckie rozwiązanie, którego jeszcze nie znalazłem.
Dlaczego można oczekiwać problemem jest „linia poniżej”, gdy kod jest barfing na '.paste()' i nawet nie dostanie się do tej linii? – kindall