• 목록
  • 아래로
  • 위로

파이썬 Pillow 라이브러리를 이용하면 다양한 방식으로 이미지를 편집할 수 있습니다.


이 글에서는 Pillow를 이용하여 이미지의 배경에 transparent한 속성을 주는 방법에 대해 살펴보겠습니다.


스포어에는 웹디자이너 회원님들께서도 많이 계실텐데 저의 허접한 실력이 부끄럽네요~



요새 많이 돌아다니는 짤을 활용해서 설명드릴게요 ^^


출처: https://sir.kr/cm_free/1518481




여러 방법을 생각해볼 수 있겠지만 다음과 같은 스크립트를 이용하여 위 이미지에서 배경을 날려버리겠습니다 ^^


설명을 드리면 이미지의 색상을 RGB로 분석하여 (255, 255, 255)이면 


alpha 값(투명도)을 0으로 변경하여 투명하게 만들어주는 방식입니다.


참고로 jpg는 transparency를 지원하지 않기 때문에, PNG GIF WEBP SVG 등을 사용해야 합니다.



from PIL import Image

img = Image.open('이미지 파일명.확장자')
img = img.convert("RGBA")
datas = img.getdata()

newData = []
cutOff = 255

for item in datas:
    if item[0] >= cutOff and item[1] >= cutOff and item[2] >= cutOff:
        newData.append((255, 255, 255, 0))
        # RGB의 각 요소가 모두 cutOff 이상이면 transparent하게 바꿔줍니다.
    else:
        newData.append(item)
        # 나머지 요소는 변경하지 않습니다.

img.putdata(newData)
img.save("생성할 파일명.png", "PNG") # PNG 포맷으로 저장합니다.



그런데 실행해보면 다음과 같이 지저분하게 처리가 되는 것을 확인할 수 있습니다.


이는 우리가 모니터로 볼 때 흰색이라고 생각되는 색을 


실제로 color picker로 찍어보면 (255, 255, 255)가 아닌 경우가 있기 때문입니다.


특히 이미지 파일을 압축하는 과정에서 이런 현상이 발생하는 것으로 알고 있습니다.





위 스크립트에서 cutOff의 값을 조금씩 낮춰보겠습니다. 


대략 150 이하에서는 다음과 같이 비교적 깨끗한 이미지를 얻을 수 있습니다 ^^


150 이하에서는 더 작은 값을 주더라도 큰 변화를 체감할 수 없었습니다.





이러한 방법은 배경이 단색일 때에는 비교적 손쉽게 활용할 수 있으나, 


여러 색상인 경우에는 다른 방법을 이용하시는 것이 좋을 것 같네요 ㅠㅠ



허접한 글을 읽어주셔서 감사합니다 ^-^


그럼 즐거운 주말 오후 되세요!


포함 1명이 추천

추천인 1

작성자
이니스프리 119 Lv. (2%) 4185630/115200000EXP

Make StudyForUs Great Again!

 

CSVpuymXAAAVVpd.jpg

댓글 11

NoYeah
profile image
매번 포토샵으로 누끼 따는 작업을 이렇게 간단하게 할 수 있다니 조금 충격이네요 ㄷㄷㄷ
comment menu
2019.08.04. 22:09

신고

"NoYeah님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → NoYeah
profile image

어떤 분께서 Pillow 라이브러리에 대해

"포토샵 정도 수준의 프로그램을 만들 것이 아니라면 충분히 강력하다"는 취지로 말씀하셨는데

몇 줄 안 되는 스크립트로 이미지를 다양한 방식으로 다룰 수 있어서

솔직히 저도 조금 놀랐습니다 ㄷㄷ


아무래도 파이썬이 머신러닝 방면으로 발전하고 있고, 머신러닝의 대상이 주로 이미지라서 그런지

상대적으로 파이썬이 다른 언어에 비해 이미지를 다루는 좋은 라이브러리들이 많은 것 같아요.

Pillow에 대한 동영상 강의나 교재가 있으면 더 공부를 해보고 싶은데

아쉽게도 몇몇 해외 강좌를 제외하면 강의가 많지는 않은 것 같고 

시중에 Pillow만 다룬 교재가 있는 것 같지는 않네요.

(역시 Numpy나 Pandas 관련해서는 교재가 많더군요 ㄷㄷ)


그럼 마스터 님께서도 편안한 밤 되시고 다음 한 주도 화이팅입니다!

comment menu
2019.08.05. 00:28

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

모니터 → NoYeah
profile image
ㄷㄷ 프로필 순간 날파리인줄..;;;
comment menu
2019.10.26. 14:38

신고

"모니터님의 댓글"

이 댓글을 신고 하시겠습니까?

갱생협스
profile image
와 생각해보니 약간 포토샵의 매직봉 같은 느낌이 있네요 ㅋㅋㅋㅋ
오차값에 따라 지저분하게 나오는것도 똑같고요..

흐음.. 파이썬을 다시 깔아봐야겠습니다. 의외로 간단하군요!
comment menu
2019.08.18. 21:46

신고

"갱생협스님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → 갱생협스
profile image

포토샵의 매직완드나 이 스크립트처럼 PIL을 사용하는 방법이나 결국 코딩의 원리는 비슷하지 않을까요? ^^

물론 포토샵의 완성도가 더 높고, 색상과 포지션을 선택하면 이를 분석하는 과정이 포함되겠지만요.

어느덧 날씨가 조금 선선해졌네요! 굿밤 되세요~

comment menu
2019.08.18. 22:33

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

변사또
와 이런 기능이 있군요 대박이네요
comment menu
2019.09.25. 23:43

신고

"변사또님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → 변사또
profile image
옙 안녕하세요?
저도 PIL(Pillow)을 공부하면서 많은 점을 느끼게 되더군요!
정말 강력한 라이브러리인 것 같아요 ^^
조금 시행착오를 겪기도 했지만 이미지매직 등을 사용하지 않고
오로지 PIL만 이용해서 짧은 스크립트로 animated GIF를 리사이징하는 것도 가능하더군요.
그럼 남은 9월 잘 마무리하세요!
comment menu
2019.09.26. 15:22

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

모니터
profile image
홍! 깔끔하다!
comment menu
2019.10.26. 14:37

신고

"모니터님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → 모니터
profile image
홍~! 날씨가 쌀쌀한데 깔끔한 모니터 님께서는 잘 계시는가요?? ^^
저는 감기에 걸려서 고생하고 있네요 ㅠㅠ
comment menu
2019.10.26. 16:37

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

모니터 → 이니스프리
profile image
저런.. 언능 쾌차하시고.. 맛있는 것도 먹고..!! 이니스프리님 프로필 처럼 달달한 생활을 하셔야 하는데..!!
저는 요즘 새로운 도전을 해볼까 고민 중이네요 ㅎㅎ
comment menu
2019.10.26. 17:31

신고

"모니터님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → 모니터
profile image

제가 프로필에 적은 티벳어의 의미는 '에베레스트'라서 달달한 생활과는 거리가 좀 있는 것 같습니다 -_-;;;

주변에 등산을 좋아하시는 분들도 안나푸르나 베이스캠프(ABC)는 가도 에베레스트 쪽으로는 잘 안 가시던데요 ㄷㄷ


그나저나 새로운 도전은 좋죠!

저도 올해 준비하던 시험에 운좋게 합격해서 내년에 연수받고 이직하게 되었습니다 ^^

그럼 모니터 님께서도 즐거운 주말 되세요~!

comment menu
2019.10.26. 18:05

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
29 [번외편 - 구글뉴스] 리뉴얼된 구글뉴스에서 RSS 피드를 생성하는 방법 6 image 이니스프리 이니스프리 18.10.07.17:58 3671
28 [번외편 - 아미나] 그누보드/아미나에서 게시글의 날짜를 최종수정일로 변경하고, 목록스킨 및 위젯을 최종수정일 순으로 정렬하기 2 image 이니스프리 이니스프리 18.11.11.22:36 2688
27 [번외편 - 법률] 현행 저작권법 제30조(사적이용을 위한 복제)에 대하여 - 음원 다운로더의 처벌과 관련하여 6 이니스프리 이니스프리 18.12.07.14:16 1433
26 [번외편 - 아미나] 아미나의 회원 이미지와 관련하여 x2 3 image 이니스프리 이니스프리 18.12.10.19:57 860
25 [번외편 - 아미나] Basic Youtube Title Widget 1.0에서 처음에 엑박으로 뜨는 경우의 해결책 3 image 이니스프리 이니스프리 18.12.15.23:02 900
24 [Selenium] Selenium에서 send_keys를 막아놓은 경우 해결책 이니스프리 이니스프리 19.07.04.05:52 4860
23 [번외편 - 유튜브] Youtube API를 이용하거나 또는 이용하지 않고 채널ID를 추출하는 방법 2 image 이니스프리 이니스프리 19.07.16.17:55 2923
22 [번외편 - 법률] 나무위키의 서술 중 법률용어의 사용에 있어 바로잡아야 할 부분 image 이니스프리 이니스프리 19.07.17.22:44 521
[Pillow] 파이썬 Pillow 라이브러리를 이용하여 이미지의 배경을 transparent하게 만들기 11 image 이니스프리 이니스프리 19.08.04.13:40 7996
20 (序) Python 강좌를 시작하며... 2 image 이니스프리 이니스프리 19.12.05.21:55 646
19 1. 반복문 (1) - while 문 7 image 이니스프리 이니스프리 19.12.06.20:50 2659
18 [Selenium] Requests의 session을 Selenium으로 보내기 image 이니스프리 이니스프리 19.12.07.14:17 4920
17 3. 문자열 처리 (1) - 문자열 접근 및 검색방법 4 image 이니스프리 이니스프리 19.12.09.20:00 1368
16 6. 리스트와 관련된 기본함수 및 메서드 7 image 이니스프리 이니스프리 19.12.10.21:16 2222
15 4. 문자열 처리 (2) - 문자열 조작에 대한 기본함수 및 메서드 1 image 이니스프리 이니스프리 19.12.12.02:27 758
14 [번외편] 네이버 동영상에서 자막을 파일로 추출하는 방법 2 image 이니스프리 이니스프리 19.12.25.22:34 5971
13 9. [정리] 파이써닉한 파이썬 문법 팁 for COS Pro image 이니스프리 이니스프리 20.01.04.23:47 1154
12 [Requests] Selenium을 이용한 Cloudflare의 우회 8 image 이니스프리 이니스프리 20.01.08.19:51 6600
11 [python-telegram-bot] 4096자 글자수 제한을 우회하는 방법 image 이니스프리 이니스프리 20.01.12.11:25 2364
10 [BeautifulSoup] 자식태그를 제거하기 - .decompose() & .extract() 10 image 이니스프리 이니스프리 20.01.16.00:07 9463