PhotoImage中的透明度错误

时间:2014-09-08 14:34:21

标签: python tkinter

我有两段代码,它们都应该创建包含黑色方块的test.png。第一个做到了,但第二个返回一个透明的方块。它们之间的区别在于第一个在左边有一个清晰的条纹而第二个没有。

第一个例子:

root = Tk()
image = PhotoImage(width = 50, height = 50)
for x in range(1, 50):
    for y in range(50):
        pixel(image, (x,y), (0,0,0))
image.write('test.png', format='png')

第二个例子:

root = Tk()
image = PhotoImage(width = 50, height = 50)
for x in range(50):
    for y in range(50):
        pixel(image, (x,y), (0,0,0))
image.write('test.png', format='png')

我还导入tkinter并使用函数pixel(),它具有以下代码:

def pixel(image, pos, color):
    """Place pixel at pos=(x,y) on image, with color=(r,g,b)."""
    r,g,b = color
    x,y = pos
    image.put("#%02x%02x%02x" % (r,g,b), (x, y))

1 个答案:

答案 0 :(得分:1)

简而言之:Tkinter的PhotoImage课程无法真正保存PNG。它只支持GIF,PGM和PPM。您可能已经注意到预览图像已正确着色,但是当您打开文件时,它是空白的。

要保存PNG图像,您必须使用Python Imaging Library,或者对于Python 3,Pillow。 有了这个,图像创建就更容易了:

from PIL import Image

image = Image.new("RGB", (50, 50), (0,0,0))
image.save('test.png', format='PNG')

如果需要,可以将其转换为可在Tkinter中使用的PIL ImageTk.PhotoImage对象。