이전에 파이썬으로 QR코드 쉽게 생성하는 방법에 대해서 다뤘습니다.
https://diyver.tistory.com/170
아무래도 쉽게 생성하다보니 기본값으로만 QR코드가 생성되어 버전, 오류 복원 레벨을 설정할 수 없는 문제가 있었습니다.
이번에는 다양한 설정값들을 세세히 다루어서 QR코드를 생성하는 방법에 대해서 다뤄보도록 하겠습니다.
1. QR코드 모듈 설치
QR코드 모듈을 설치를 해야겠죠?
pip install qrcode[pil]
파이썬 명령프롬프트에서 위의 명령으로 QR코드 모듈을 설치하시기 바랍니다.
이전에 하셨다면 건너뛰셔도 좋습니다.
2. 코딩
import qrcode
import cv2
qr_text = "https://diyver.tistory.com"
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_M,
box_size=4,
border=10,
)
qr.add_data(qr_text)
qr.make(fit=True)
qr_img = qr.make_image(fill_color="black", back_color="white")
qr_img.save('qr_test.jpg')
qr_img_read = cv2.imread('qr_test.jpg',cv2.IMREAD_GRAYSCALE)
#qr_img = cv2.imread('qr_test.jpg',cv2.IMREAD_COLOR)
qr_img_cut = qr_img_read.copy()
cv2.imshow('image',qr_img_cut)
cv2.waitKey(0)
cv2.destroyAllWindows()
OpenCV 모듈을 설치하셨다면 쉽게 사용하실 수 있지만,
설치 안 하셨다면 cv2 관련 행을 다 삭제해주세요.
3. 실행 결과
QR코드가 생성된 것을 볼 수 있습니다.
4. 설명
영문으로 더 자세하게 보시고 싶으시다면 해당 글보다는 아래 사이트에서 확인하시기 바라겠습니다.
https://pypi.org/project/qrcode/
코드 중에서 해당 부분을 보시면
version 은 QR코드 버전으로 제일 작은 사이즈가 버전 1 입니다.
버전 1이 21x21 cell 크기입니다.
버전 40은 177x177 cell 크기입니다.
버전은 40까지 있다고 보시면 되겠습니다.
나머지는 그대로두고 버전만 5로 해서 QR코드를 다시 만들어 보겠습니다.
버전 1에 비해서 QR코드 크기가 커진 것을 확인할 수 있겠습니다.
버전 별로 저장할 수 있는 데이터 크기가 다릅니다.
숫자만 저장한다면 꽤 많이 저장할 수 있으나, 영어+숫자를 혼합한다면 그 수는 줄어들게 됩니다.
더 자세한 표를 보시고 싶으시다면 아래 페이지에서 확인 가능합니다.
https://www.qrcode.com/ko/about/version.html
버전이 크다면 QR코드 크기는 고정해놓고 데이터가 저장될 수 있습니다.
다만, 버전이 낮다면 저장할 데이터 크기가 크다면 버전이 자동으로 올라가게 됩니다.
버전을 기입하지 않으면 자동으로 데이터 크기에 맞춰집니다.
이번에는 오류복원 레벨에 대해서 살펴보겠습니다.
ERROR_CORRECT_L
- 7%의 오류 복원 능력을 보유
- 깔끔하고 QR코드가 더렵혀지지 않은 환경에 적합
ERROR_CORRECT_M
- 15%의 오류 복원 능력을 보유
ERROR_CORRECT_Q
- 25%의 오류 복원 능력을 보유
ERROR_CORRECT_H
- 30%의 오류 복원 능력을 보유
- QR코드가 더렵혀지거나 깨끗하지 않은 환경에 적합
이 명령은 QR코드가 사용될 환경에 따라서 꼭 다뤄야 하는 부분입니다.
오류 복원 능력이 작을 수록 QR코드 크기는 작아집니다.
그런데 QR코드는 작은게 좋다고해서 적합하지 않은 환경에 LOW LEVEL로 QR코드를 사용한다면
인식이 잘 안되어서 문제가 발생합니다.
따라서 복합적으로 판단하셔야 합니다.
버전을 똑같이 두더라도
오류복원 레벨에 따라서 QR코드 크기가 달라집니다.
아래 결과를 확인해 보시죠.
우측은 버전 1이 아니라 자동으로 버전 3 정도로 커진것을 볼 수 있습니다.
오류 복원 레벨을 테스트 해보겠습니다.
두 QR코드에 각각 부분적으로 더렵혀보겠습니다.
왼쪽은 인식이 안되구요
오른쪽은 인식이 됩니다.
따라서 오류복원 레벨 역시 중요한 요소 중 하나라는 것을 알 수 있습니다.
박스 사이즈는 1cell 의 한 변의 크기를 나타냅니다.
박스 사이즈가 1이면 QR코드의 점 한개 한개가 1px 인 것입니다.
만약 박스 사이즈가 4이면
점 한개(1cell)는 4x4px 의 크기인 것입니다.
전체적인 QR코드 이미지 크기에 관여한다고 볼 수 있겠습니다.
마지막으로 보더 는 테두리(여백)입니다.
QR코드는 코드와 배경과의 색 대비로 인식됩니다.
따라서 어느정도 배경 사이즈가 QR코드보다 더 커야지 인식이 잘 되게 됩니다.
그런 여백 크기를 조절 하는 부분이 border 입니다.
보더를 0으로 하면 딱 QR코드 크기에 맞게 이미지가 생성됩니다.
도움이 되었거나, 문제가 있는 경우 댓글로 알려주세요~!
감사의 댓글은 작성자에게 큰 힘이 됩니다 ^^
'코딩 > 파이썬' 카테고리의 다른 글
파이썬으로 한글폰트 텍스트 이미지 만들기 (0) | 2021.09.16 |
---|---|
파이썬 QR코드 쉽게 생성하기 (4) | 2021.09.11 |
아나콘다 파이썬 OpenCV 설치하는 방법 (0) | 2021.09.11 |
파이썬 웹서버에 MySQL 데이터 표로 출력하기 (0) | 2021.08.20 |
파이썬에서 MySQL 사용하기 (0) | 2021.08.19 |
댓글