0

여기에 문제의 이미지. 나는이 변경 사항을 사용자 (자신)에게 보여줄 필요가 있으므로 사용자 조작에 따른 문제가 무엇인지 알 수 있습니다.픽셀 조작은

나는 원래 이렇게 PIL과 Tkinter를 사용하려고 -하지만 난 심지어 GUI에 이미지를로드 할 수 없습니다 - 여기에 웹의 구석에서 형성 코드의 비트가 많은 구글 검색을 통해,이다 :

from Tkinter import * 
import Image, ImageDraw, ImageTk 
import time 

class Test(Frame): 
    def __init__(self): 
     Frame.__init__(self) 
     self.c = Canvas(self, width=574, height=431, bg="red") 
     self.c.pack() 
     Button(self, text="Process", command=self.procImg).pack() 
     Button(self, text="Quit", command=self.quit).pack() 
    def procImg(self): 
     t = time.time() 
     self.flashImg = Image.open("./in_img/resize.bmp") 
     #self.flashImg = flashImg.resize((574, 431)) 
     self.flashImg = self.flashImg.convert("L") 
     #self.photo = ImageTk.BitmapImage(flashImg) 
     self.c.photo = ImageTk.PhotoImage(self.flashImg) 
     self.c.create_image(574, 431, anchor=NW, image=self.c.photo) 
     self.c.create_rectangle(50, 50, 100, 100, fill="blue") 
     self.update() 
     print time.time()-t 

t = Test() 
t.pack() 
t.mainloop() 

위의 코드는 꽤 나쁘다는 것을 알고 있습니다. 그러나 적어도이 문제를 해결하기 위해 뭔가를 게시하고 싶습니다.

누구든지 파이썬을 사용하여이 문제에 접근하는 새로운 방법을 제안 할 수 있습니까? 차라리 다른 언어를 배우지 않을 것입니다. Tkinter 라이브러리가 생소하여 다른 언어가 더 적합 할 경우 새 라이브러리를 배우는 데 문제가 없습니다.

참고로, "resize.bmp"이미지는 디지털 카메라의 크기가 조정 된 .JPG입니다. 나는 그것을 시도해 보았지만 작동하지 않았다. 메모리에서 화면으로의 비트 맵을 GUI로 비춰서 처리가 진행되는 동안 매개 변수를 조정할 수있는 방법을 찾아야한다.

도움 주셔서 감사합니다.

답변

1

아마도 이미지가있을 수 있습니다. 그것은 단지 보이지 않습니다.

대신 :

self.c.create_image(574, 431, anchor=NW, image=self.c.photo) 

시도 : 캔버스의 이미지 항목에 대한 참조를 유지하는 경우도

self.c.create_image(0, 0, anchor=NW, image=self.c.photo) 

이, 당신이 다른 이미지를 스왑 아웃 할 수 있습니다.

예 : (self.canvasItem) 아래 :

from Tkinter import * 
from PIL import Image, ImageTk, ImageDraw, ImageOps, ImageEnhance 


class ImageButcher(Tk): 
    def __init__(self): 
     Tk.__init__(self) 

     #create ui 
     f = Frame(self, bd=2) 

     self.colour = StringVar(self) 
     self.colourMenu = OptionMenu(f, self.colour, 
            *('red','green','blue','white')) 
     self.colourMenu.config(width=5) 
     self.colour.set('red') 
     self.colourMenu.pack(side='left') 

     self.rectangleButton = Button(f, text='Rectangle', 
            command=self.draw_rectangle) 
     self.rectangleButton.pack(side='left') 

     self.brightenButton = Button(f, text='Brighten', 
            command=self.on_brighten) 
     self.brightenButton.pack(side='left') 

     self.mirrorButton = Button(f, text='Mirror', 
            command=self.on_mirror) 
     self.mirrorButton.pack(side='left') 
     f.pack(fill='x') 

     self.c = Canvas(self, bd=0, highlightthickness=0, 
         width=100, height=100) 
     self.c.pack(fill='both', expand=1) 

     #load image 
     im = Image.open('IMG_1584.JPG') 
     im.thumbnail((512,512)) 

     self.tkphoto = ImageTk.PhotoImage(im) 
     self.canvasItem = self.c.create_image(0,0,anchor='nw',image=self.tkphoto) 
     self.c.config(width=im.size[0], height=im.size[1]) 

     self.img = im 
     self.temp = im.copy() # 'working' image 

    def display_image(self, aImage): 
     self.tkphoto = pic = ImageTk.PhotoImage(aImage) 
     self.c.itemconfigure(self.canvasItem, image=pic) 

    def on_mirror(self): 
     im = ImageOps.mirror(self.temp) 
     self.display_image(im) 
     self.temp = im 

    def on_brighten(self): 
     brightener = ImageEnhance.Brightness(self.temp) 
     self.temp = brightener.enhance(1.1) # +10% 
     self.display_image(self.temp) 

    def draw_rectangle(self): 
     bbox = 9, 9, self.temp.size[0] - 11, self.temp.size[1] - 11   
     draw = ImageDraw.Draw(self.temp) 
     draw.rectangle(bbox, outline=self.colour.get()) 
     self.display_image(self.temp) 


app = ImageButcher() 
app.mainloop() 
+0

멋지다. 에픽 -이게 내 질문에 대한 답변입니다. 고맙습니다! – jimf

관련 문제