Python2.7.3とPIL1.1.7を使用してWindows7プラットフォームで開発しています。
テキストを含む一連の画像を生成するPythonスクリプトを作成しようとしています。テキストを折り返して任意の境界ボックスに収める必要があるため、アルファ透明レイヤーをオンにして、白いRGBA背景画像にテキストを描画するメソッドを作成しました。問題を単純化するために、問題を説明する小さなPythonスクリプトを作成しました。
import Image,ImageDraw,ImageFont
import webbrowser
# sample text and font
text = "The text quality will degrade with the paste operation."
verdana_font = ImageFont.truetype("verdana.ttf", 20)
# get the line size
text_width, text_height = verdana_font.getsize(text)
# create a blank canvas with extra space between lines
blank_canvas = Image.new('RGB', (text_width + 10, text_height * 10 + 5 * 10), (255, 255, 255))
# create a blank RGBA canvas for the drawn text
text_canvas = Image.new('RGBA', (text_width, text_height), (255, 255, 255, 0))
draw = ImageDraw.Draw(text_canvas)
# draw the text onto the text canvas
draw.text((0,0), text, font = verdana_font, fill = "#000000")
# print 10 lines
for x in range(0,10):
# calculate the coordinates for the paste operation and debug
coordinates = (5, 5 + (x * (5 + text_height)))
print "x = %d | coordinates = %r" % (x, coordinates)
# paste the text onto the blank canvas
blank_canvas.paste(text_canvas, coordinates, text_canvas)
# create a temporary canvas
temp_canvas = Image.new('RGBA', (text_width, text_height), (0, 0, 0, 0))
# paste the text canvas onto the temp canvas using the png alpha layer for transparency
temp_canvas.paste(text_canvas, (0,0), text_canvas)
# swap the canvases
text_canvas = temp_canvas
# save the blank canvas to a file
blank_canvas.save("paste-degradation.png", "PNG")
# open the image up to see the paste operation's image degradation
webbrowser.open("paste-degradation.png")
テキストが新しい「一時的な」キャンバスに貼り付けられるたびに、描画されるテキストの画質はますます悪化します。上記のコードは、次のような画像を生成します。
コードに問題がありますか?またはPILにバグがありますか?