Сегодня я попытался создать код Python для инвертирования цветов изображения .gif с использованием библиотеки Tkinter. Код работает и делает именно то, что я ожидал, но для работы на процессоре 3,4 ГГц требуется около 50 секунд. У меня проблемы с просмотром, что я могу изменить, чтобы оптимизировать это. По сути, я перебираю каждый пиксель в изображении, собираю значения цвета, преобразую их в список целых чисел (чтобы манипулировать ими математически), инвертирую каждое значение цвета (новое значение цвета = 255 - старое значение цвета), преобразовываю их вернуться к строке, чтобы метод «put» PhotoImage мог их обработать, переписать изображение и, наконец, отобразить перевернутое изображение. Я не могу думать о том, что изменить. Я имею в виду, что прохождение каждого пикселя должно быть частью медлительности, но разве этот процесс не является абсолютно необходимым?
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()
Заранее спасибо за помощь.
-Seth