PIL1.1.7を使用してPython 2.7で画像プロセッサのプロトタイプを作成しています。すべての画像がJPGになるようにしたいと思います。入力ファイルの種類には、透過性と無しの両方のtiff、gif、pngが含まれます。私は、私が見つけた2つのスクリプトを組み合わせようとしてきました.1。他のファイルタイプをJPGに変換し、2。空白の白いイメージを作成し、元のイメージを白い背景に貼り付けることで透明性を取り除きます。私の検索は、反対ではなく透明性を生み出すか維持しようとする人々とスパムされています。PIL透明度のあるPNGまたはGIFをJPGに変換せずに
私は現在、これで働いている:
#!/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を取得:悪い透明マスクを。
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を削除し、私はよ私がまだ見つけていない優雅な解決策があることを願っています。
は、なぜあなたは問題がコードがbarfingされたときに、「次の行」で期待を持っているそれらの画像上で動作するはずです'.paste()'に書かれていて、その行にさえいらっしゃいませんか? – kindall