2021. 1. 30. 16:57ㆍPython
우선 간단하게 이미지를 비교하기 위해 제 블로그에 프로필 사진으로 해봤어요 ㅋㅋㅋ
노란색으로 하트를 그려놨으니 당연히 이미지가 다르다고 Check를 할 것이기 때문이죠
이미지를 비교하기 위해 제가 사용한 Library는 Pillow라는 것을 사용했습니다.
<사전 준비>
이미지를 비교하기 위해 Pillow를 설치를 해야 합니다.
pip install Pillow 명령어로 설치를 합니다.
그리고 또 requests 도 설치를 해야 합니다.
request가 필요한 이유는 URL로 넘어온 이미지는 Pillow에서 image.open시 오류가 나더라구요.
그래서 requests와 io를 통해서 이미지를 byte로 변환하여 image화 시키는 과정에서 필요합니다.
(닷넷 개발할 때 이미지나 파일 변환할 때 바이트로 변환해서 전송 많이 했었는데..ㅎㅎ)
어쨋든 아래 명령어로 설치를 합니다.
pip install requests
<코드 작성>
<com_img.py>
먼저 간단하게 사용하기 위해 클래스를 만들어서 작성을 했습니다.
필요한 선언문 작성해주고~
from PIL import Image, ImageChops
import io
import requests
클래스를 작성하고 비교할 이미지 경로를 처리하기 위해 받아올 파라미터 값을 받습니다
class Sunbae_Automation:
def __init__(self, imgURL_path, imgLocal_path):
self.__imgURL_path = imgURL_path
self.__imgLocal_path = imgLocal_path
실질적으로 이미지 비교를 하기 위한 코드
ImageChos.difference라는 Method를 이용하여 비교를 하는데
둘 다 컨버트를 하는 건 일단 RGB화 시켜서 비교를 하려고 했습니다.
이미지와 비교를 해서 만약 다른 부분이 있다면 다른 부분에 대한 좌표 위치 값을 보여줍니다.
그래서 일단 값이 있다면 이미지는 다른 이미지라고 판단하게 작성
diff = ImageChops.difference(img1.convert('RGB'), img2.convert('RGB'))
# 다른 부분이 있는지?
if diff.convert('RGB').getbbox():
isFlag = False
# 다른 부분에 대한 값이 있는 경우 불일치
else:
isFlag = True
print(diff.convert('RGB').getbbox())
<main_stage.py>
작성한 클래스를 호출하기 위해 import 하고 비교할 이미지의 url과 경로들을 지정 합니다.
from comp_img import Sunbae_Automation
imgURL = "https://blogpfthumb-phinf.pstatic.net/MjAyMTAxMjZfODAg/MDAxNjExNjM4MTcxNzQ5.XMm4hIOEIAJurXjxx2yrv1v01VOBT_q6tutmSZOUST4g.5kuQNA_23MGs1wIy1PhWTra3ynQWpciBQwNI6uE8pAgg.PNG.tnsqo1126/profileImage.png?type=w161"
imgLocal = "D:\\MyProject\\python\\profileImage.png"
a = Sunbae_Automation(imgURL,imgLocal)
# 일치 하는가!
isflat = a.isAttendance()
if isflat == True:
print("Match!!")
# 일치 할 경우
else:
print("not Match!!")
# 불일치 할 경우
이렇게 하여 만약 이미지가 일치하거나 일치하지 않은 경우 메시지를 뿌려줍니다.
<전체 코드>
com_img.py
from PIL import Image, ImageChops
import io
import requests
class Sunbae_Automation:
def __init__(self, imgURL_path, imgLocal_path):
self.__imgURL_path = imgURL_path
self.__imgLocal_path = imgLocal_path
def __getImage(self,path):
response = requests.get(path)
image_bytes = io.BytesIO(response.content)
imgURL = Image.open(image_bytes)
return imgURL
def isAttendance(self):
isFlag = True
img1 = self.__getImage(self.__imgURL_path)
img2 = Image.open(self.__imgLocal_path)
try:
diff = ImageChops.difference(img1.convert('RGB'), img2.convert('RGB'))
# 다른 부분이 있는지?
if diff.convert('RGB').getbbox():
isFlag = False
# 다른 부분에 대한 값이 있는 경우 불일치
else:
isFlag = True
print(diff.convert('RGB').getbbox())
except:
isFlag = True
return isFlag
main_stage.py
from comp_img import Sunbae_Automation
imgURL = "https://blogpfthumb-phinf.pstatic.net/MjAyMTAxMjZfODAg/MDAxNjExNjM4MTcxNzQ5.XMm4hIOEIAJurXjxx2yrv1v01VOBT_q6tutmSZOUST4g.5kuQNA_23MGs1wIy1PhWTra3ynQWpciBQwNI6uE8pAgg.PNG.tnsqo1126/profileImage.png?type=w161"
imgLocal = "D:\\MyProject\\python\\profileImage.png"
a = Sunbae_Automation(imgURL,imgLocal)
# 일치 하는가!
isflat = a.isAttendance()
if isflat == True:
print("Match!!")
# 일치 할 경우
else:
print("not Match!!")
# 불일치 할 경우
※ 이 방법이 실무에서 사용되는 방식이라거나 그런건 아니며, 개인적으로 사용하기 위해 만든 겁니당
'Python' 카테고리의 다른 글
원하는 비율로 문자 랜덤생성하기 List [Python] (0) | 2022.03.11 |
---|---|
Python 요일 표시하는 방법 (초간단) (0) | 2022.03.03 |
Selenium 에서 iFrame 처리하는 방법 Python (1) | 2022.02.20 |
해결법 module 'datetime' has no attribute 'strftime' (0) | 2022.02.05 |
Python) Selenium IE Driver Pop-up 처리 (0) | 2021.02.01 |