Tôi đang tạo mẫu bộ xử lý hình ảnh trong Python 2.7 bằng PIL1.1.7 và tôi muốn tất cả hình ảnh kết thúc bằng JPG. Các loại tệp đầu vào sẽ bao gồm tiff, gif, png cả với độ trong suốt và không có. Tôi đã cố gắng để kết hợp hai kịch bản mà tôi thấy rằng 1. chuyển đổi các loại tập tin khác để JPG và 2. loại bỏ minh bạch bằng cách tạo ra một hình ảnh trắng trống và dán hình ảnh ban đầu trên nền trắng. Các tìm kiếm của tôi đang bị spam với những người tìm cách tạo ra hoặc duy trì sự minh bạch hơn là ngược lại.PIL Chuyển đổi PNG hoặc GIF với Độ trong suốt sang JPG mà không cần
Tôi hiện đang làm việc với điều này:
#!/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
Cả hai kịch bản làm việc trong sự cô lập, nhưng như tôi đã kết hợp chúng tôi nhận được một ValueError: Xấu Transparency Mask.
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
Tôi nghi ngờ rằng nếu tôi lưu PNG không có độ trong suốt thì tôi có thể mở tệp mới đó và lưu lại dưới dạng JPG và xóa PNG được ghi vào đĩa. hy vọng rằng có một giải pháp tao nhã mà tôi chưa tìm thấy.
Tại sao bạn mong chờ vấn đề là "dòng bên dưới" khi mã được barfing trên '.paste()' và thậm chí không đến được dòng đó? – kindall