我今天尝试使用 Tkinter 库创建一个 Python 代码来反转 .gif 图像的颜色。该代码可以正常工作并且完全符合我的预期,但在 3.4ghz 处理器上运行大约需要 50 秒。我很难看到我可以改变什么来优化它。基本上,我遍历图像中的每个像素,获取颜色值,将它们转换为整数列表(以便在数学上操作它们),反转每个颜色值(新颜色值 = 255 - 旧颜色值),转换它们返回一个字符串,以便 PhotoImage 的“put”方法可以处理它们并重写图像,最后显示反转的图像。我想不出要改变什么。我的意思是,循环遍历每个像素肯定是缓慢的一部分,但是这个过程不是完全必要的吗?
from Tkinter import *
import tkMessageBox
class GUIFramework(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.grid(padx=0, pady=0)
self.btnDisplay = Button(self, text="Display!", command=self.Display)
self.btnDisplay.grid(row=0, column=0)
def Display(self):
a = ''
b = []
self.imageDisplay = PhotoImage(file='C:\image.gif')
for x in range(0, self.imageDisplay.width()):
for y in range(0, self.imageDisplay.height()):
value = self.imageDisplay.get(x,y)
for i in value:
try:
c = int(i)
a += (i)
except:
b.append(int(a))
a = ''
b.append(int(a))
for i in range(0,3):
b[i] = (255 - b[i])
self.imageDisplay.put('#%02x%02x%02x' %tuple(b), (x,y))
b = []
a = ''
c = Canvas(self, width=700, height=700); c.pack()
c.grid(padx=0,pady=0, column=0, row=0)
c.create_image(0,0, image = self.imageDisplay, anchor = NW)
if __name__ == "__main__":
guiFrame = GUIFramework()
guiFrame.mainloop()
在此先感谢您的帮助。-赛斯