ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python: Pillow 라이브러리 정리(이미지 편집, 이미지 필터, tkinter활용)
    Python 2021. 5. 2. 21:33

      pillow는 이미지 편집을 위한 라이브러리

     

     

    1. 이미지 크기와 포멧정보 보기 

    from PIL import Image
    img = Image.open('gif/panda.gif')
    print(img.size)  # (900, 1000)의 크기로 출력
    print(img.format)  # gif 포멧으로 출력

     

     

     

     

    2. 이미지 잘라내기 

    from PIL import Image
    img = Image.open('gif/panda.gif')
    print(img.size)
    print(img.format)
    
    # 이미지 잘라내기
    xy = (100, 200, 600, 700) # (100, 200), (600, 700)을 지나는 직사각형으로 자른다. 
    crop_img = img.crop(xy)  # crop 메서드를 이용해서 자른다.
    crop_img.show()  # 이미지를 띄운다. 

     

    (100, 200)과 (600, 700)을 지나는 사각형으로  crop하기

     

     

     

     

    3. 이미지 병합하기 

    from PIL import Image
    img = Image.open('gif/panda.gif')
    print(img.size)
    print(img.format)
    
    # 이미지 잘라내기
    xy = (100, 200, 600, 700) # (100, 200)~ (600, 700)
    crop_img = img.crop(xy)
    crop_img.show()
    
    # 이미지 붙여넣기 
    xy = (0, 0, 500, 500)
    img.paste(crop_img, xy)  # xy에 자른 이미지를 병합한다. 
    img.show()

    자른 이미지를 (0, 0)과 (500, 500)을 잇는 사각형안에 붙혀넣기

    참고로 붙여 넣는 이미지의 크기와 원래이미지의 크기가 같아야 한다.

     

     

     

     

    4. 이미지 회전, 리사이즈, 뒤집기 

     

    1) 이미지 회전

    from PIL import Image
    img = Image.open('gif/panda.gif')
    img_r = img.rotate(90)  # 시계 반대방향으로 90도회전
    img_r.show()
    

     

     

    2) 이미지 리사이즈

    from PIL import Image
    img = Image.open('gif/panda.gif')
    img_s = img.resize((500, 500))
    img_s.show()

    500 x 500 사이즈로 지정

     

     

    3) 이미지 뒤집기 

    from PIL import Image
    img = Image.open('gif/panda.gif')
    img_opp = img.transpose(Image.FLIP_TOP_BOTTOM)  # 이미지 대칭이동
    img_opp.show()
    

    FLIP_LEFT_RIGHT =  좌우반전

    FLIP_TOP_BOTTOM = 상하반전

     

     

     

     

    5. RGB처리하기

     

    1) rgb값 잘라내기

    # RGB처리하기
    from PIL import Image
    img = Image.open('gif/panda.gif') # split을 이용하여 r, g, b값을 잘라낸다.
    r, g, b = img.split()
    r.show()
    g.show()
    b.show()

    split을 이용하여 r, g, b값을 잘라낸다.

     

     

     

    2) rgb merge하기 

     

    r, g, b 순서에 따라 여러가지 조합이 나온다. 

    # merge이용해서 rgb합치기
    from PIL import Image
    img = Image.open('gif/panda.gif')
    r, g, b = img.split()
    RGB_img = Image.merge("RGB", (b, g, r))  # 다양한 순서쌍을 만들수 있다. 
    # (r, g, b), (r, b, g), (r, r, g)... 
    RGB_img.show()

     

     

     

     

     

     

    6. 필터 씌우기 

     

    <필터링 속성>

     

    # 이미지 필터 씌우기
    from PIL import Image
    from PIL import ImageFilter
    img = Image.open('gif/panda.gif')
    img1 = img.filter(ImageFilter.BLUR)
    img2 = img.filter(ImageFilter.EMBOSS)
    img3 = img.filter(ImageFilter.CONTOUR)
    
    img1.show()
    img2.show()
    img3.show()

     

     

     

     

     

    7. tkinter에 이미지 띄우기 

     

    tkinter가 뭔지 궁금하다면?

     

    Python: Window programming Tkinter 라이브러리 정리 1

    < Tkinter란? > < Tkinter 라이브러리 구성요소 > 1. 윈도창 조절 from tkinter import * # Tk객체 생성 window =Tk() window.title("연습하기") # 기본창 사이즈 window.geometry("400x100") # 창 크기 조절하..

    seungjuitmemo.tistory.com

     

    pillow는 tkinter를 이용할 수 있도록 클래스를 지원한다. 

    canvas는 선, 다각형, 원등을 그리기 위한 캔버스를 생성한다.

     

    1) canvas 사용하기 

    # tkinter에 이미지 띄우기
    from PIL import Image, ImageTk
    import tkinter
    root = tkinter.Tk()
    canvas = tkinter.Canvas(root, width=1200, height=867)  # canvas를 생성
    canvas.pack() 
    img = Image.open('gif/panda.gif')
    img_tk = ImageTk.PhotoImage(img)  # 위젯들의 공간에 이미지 설정
    canvas.create_image(600, 300, image=img_tk) # (600, 300) 위치에 이미지를 생성한다.
    root.mainloop()
    

    (tkinter에도 imageTk 메서드가 있으므로 구분해서 사용한다)

     

     

    2) RGB picker 만들기

     

    이미지의 일정 부분을 클릭하면 해당 부분의 RGB 값을 출력하는 프로그램을 만든다.

     

    # rgb picker
    import tkinter
    from PIL import Image, ImageTk
    
    def click(event):  # 클릭이벤트 처리하는 함수 
        print("클릭 위치:", event.x, event.y)  # 클릭위치 출력
        r, g, b = img.getpixel((event.x, event.y))  # 클릭한 위치의 픽셀 값을 얻어온다.
        print("R:{} G:{} B:{}".format(r, g, b))
    
    
    root = tkinter.Tk()  # tkinter 객체 만들어주기
    cv = tkinter.Canvas(root, width=1000, height=1000) # 캔버스 생성
    cv.bind("<Button>", click)  # 캔버스에 마우스 클릭 바인딩 해주기 
    cv.pack()
    
    img = Image.open('gif/panda.gif')  # 이미지 가져오기
    img_tk = ImageTk.PhotoImage(img)  # 이미지 위젯 만들기
    cv.create_image(250, 250, image=img_tk)  # 캔버스위에 이미지 올리기
    
    root.mainloop()

     

     

    반응형

    댓글

Designed by Tistory.