Я прототипирую процессор изображений в Python 2.7, используя PIL1.1.7, и я хотел бы, чтобы все изображения попадали в JPG. Типы входных файлов будут включать в себя tiff, gif, png как с прозрачностью, так и без. Я пытался объединить два сценария, которые я нашел, что 1. конвертировать другие типы файлов в JPG и 2. удалить прозрачность, создав пустое белое изображение и вставляя исходное изображение на белом фоне. Мои поисковые запросы рассылаются спамом с людьми, которые хотят генерировать или сохранять прозрачность, а не наоборот.
В настоящее время я работаю с этим:
#!/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
Оба сценария работают изолированно, но по мере их объединения я получаю маску ValueError: Bad Transparency.
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
Я подозреваю, что если бы я сохранил PNG без прозрачности, я мог бы открыть этот новый файл и повторно сохранить его как JPG и удалить PNG, который был записан на диск, но я надеюсь, что есть элегантное решение, которое я еще не нашел.