
링크 공유를 위한 QR코드 생성, 글자/이미지 삽입 - qrcode
들어가며
QR코드는 이미지, 링크 등을 간편하게 공유할 수 있고, 온라인은 물론 오프라인으로도 배포가 가능합니다. 또한, 로고나 색상을 삽입하여 커스터마이징한 QR코드는 브랜드를 강조하고, 마케팅에도 효과적입니다.
이 글에서는 QR코드를 생성하고, 텍스트와 이미지 로고를 삽입하는 방법을 함께 소개합니다. 먼저, QR코드 생성에 필요한 패키지를 다운로드합니다.
! pip install qrcode
링크 공유 QR 코드 생성
링크를 공유하기 위한 QR코드 생성은 다음과 같습니다.
베이스 QR코드 생성
먼저 베이스가 되는 QR코드를 생성합니다.
version은 QR코드의 크기를 결정하는 숫자로 1부터 40까지 가능합니다. 숫자가 커질수록 더 많은 데이터를 저장할 수 있습니다. 예를 들어, version=1은 아주 간단한 데이터, version=40은 아주 많은 데이터(영수증, 명함) 등을 저장할 수 있습니다.
error_correction은 손상되거나 가려져도 복원 가능한 비율입니다. 총 4가지(L, M, Q, H) 레벨이 있으며, 복원률이 높을수록 QR코드 크기가 커집니다. 예를 들어, H는 가장 높은 레벨로 30%의 복원이 가능하며, 이는 이미지가 최대 30%가 손상되어도 내용을 복원할 수 있다는 뜻입니다.
box_size는 QR코드의 정보량을 결정하는 크기입니다. 숫자가 커질수록 더 많은 데이터를 저장할 수 있습니다.
border는 QR코드 테두리의 흰 여백 영역 두께입니다. 최소 4이상을 권장합니다.
즉, version은 책의 페이지 수, 페이지가 많을수록 내용을 더 많이 저장할 수 있습니다. box_size는 책의 글자 크기입니다. 글자 크기가 클수록 눈에 잘 보이지만, 내용은 그대로입니다.
import qrcode
# QR 코드 생성
qr = qrcode. QRCode(
version=2, # 크기
error_correction=qrcode.constants.ERROR_CORRECT_H, # 오류 복원율
box_size=10, # 박스 크기
border=4 # 테두리 두께
)
데이터 저장
add_date는 QR코드에 저장할 데이터를 추가하는 메서드입니다. make는 추가한 데이터가 모두 들어갈 수 있도록 적절한 크기로 생성하는 메서드입니다. QR코드의 version을 자동으로 조정합니다. fit=True를 사용할 경우, 위에서 version 옵션을 1로 설정해도 자동으로 조정합니다.
qr.add_data("https://wewegh.tistory.com/")
qr.make(fit=True)
이미지 렌더링 및 저장
make_image는 생성한 QR코드를 실제 이미지 객체로 변환합니다. fill_color는 QR코드의 패턴 색상, back_color는 배경 색상을 의미합니다. save는 생성한 이미지를 PNG 파일로 저장합니다. 생성한 QR코드 결과는 다음 이미지와 같습니다.
qr_img = qr.make_image(fill_color="orange", back_color="white")
qr_img.save("sample_qrcode.png")

링크 연결 QR 코드 생성 - 텍스트 삽입
QR코드에 텍스트를 삽입하여 커스터마이징하는 방법은 다음과 같습니다.
베이스 QR코드 생성
베이스 QR코드를 생성하고, 데이터를 저장하는 과정은 위와 동일합니다.
import qrcode
from PIL import Image, ImageDraw, ImageFont
# QR 코드 생성
qr = qrcode. QRCode(
version=2, # 크기
error_correction=qrcode.constants.ERROR_CORRECT_H, # 오류 복원율
box_size=10, # 박스 크기
border=4 # 테두리 두께
)
# 데이터 저장
qr.add_data("https://wewegh.tistory.com/")
qr.make(fit=True)
# 이미지 렌더링
qr_img = qr.make_image(fill_color="black", back_color="white")
텍스트 삽입용 원형 배경 + 텍스트
삽입할 텍스트는 원형 배경과 함께 추가합니다. '원형 배경+텍스트'의 크기(logo_size)는 100으로 설정하며, ellipse 메서드를 사용하여 '흰색 원형 배경'을 생성합니다.
logo_size = 100
logo_img = Image.new("RGBA", (logo_size, logo_size), (255, 255, 255, 0))
draw = ImageDraw.Draw(logo_img)
# 배경 - 흰색 원
draw.ellipse((0, 0, logo_size, logo_size), fill="white")

사용할 폰트와 폰트 크기를 설정하고, textsize로 텍스트의 가로, 세로 길이를 측정합니다. text_x, text_y는 텍스트를 이미지 중앙에 위치시키기 위한 좌표입니다. draw.text는 로고 이미지의 정중앙에 검정색 'GH' 텍스트를 추가합니다.
# 폰트 설정
font_path = "C:/Windows/Fonts/arialbd.ttf" # 폰트 경로
font = ImageFont.truetype(font_path, 40)
# 텍스트 추가
text = "GH"
text_width, text_height = draw.textsize(text, font=font)
text_x = (logo_size - text_width) // 2
text_y = (logo_size - text_height) // 2
draw.text((text_x, text_y), text, fill="black", font=font)

QR코드 중앙 텍스트 추가 및 이미지 저장
위에서 만든 '원형 배경+텍스트'를 정중앙에 배치합니다. pos는 QR코드의 중앙 위치입니다. 그리고 save 메서드를 활용하여 완성된 QR코드를 이미지로 저장합니다.
# 텍스트 추가
qr_width, qr_height = qr_img.size
pos = ((qr_width - logo_size) // 2, (qr_height - logo_size) // 2)
qr_img.paste(logo_img, pos, logo_img)
# 저장
qr_img.save("sample_qrcode_text.png")

링크 연결 QR 코드 생성 - 이미지 추가
QR코드에 이미지를 추가하여 커스터마이징하는 방법은 다음과 같습니다.
베이스 QR코드 생성
베이스 QR코드를 생성하고, 데이터를 저장하는 과정은 위와 동일합니다.
import qrcode
from PIL import Image
# QR코드 생성
qr = qrcode. QRCode(
version=2, # 크기
error_correction=qrcode.constants.ERROR_CORRECT_H, # 오류 복원율
box_size=10, # 박스 크기
border=4 # 테두리 두께
)
# 데이터 저장
qr.add_data("https://wewegh.tistory.com/")
qr.make(fit=True)
# 이미지 렌더링
qr_img = qr.make_image(fill_color="black", back_color="white")
로고 이미지 추가
추가할 로고 이미지의 경로를 입력하고, 로고를 QR코드의 1/4 크기로 조정합니다.
# 로고 이미지 로드
logo = Image.open(r"C:\Users\Desktop\logo.jpg") # 이미지 파일명 경로
# 로고 크기 조절
qr_width, qr_height = qr_img.size
logo_size = qr_width // 4 # QR 크기의 1/4
logo = logo.resize((logo_size, logo_size), Image.LANCZOS)
QR코드 중앙 로고 추가 및 이미지 저장
QR코드의 중앙 위치인 pos를 활용하여 로고를 추가하고, save 메서드를 활용하여 완성된 QR코드를 이미지로 저장합니다.
# 로고 추가
pos = ((qr_width - logo_size) // 2, (qr_height - logo_size) // 2)
qr_img.paste(logo, pos)
# 저장
qr_img.save("sample_qrcode_logo.png")
전체 코드
# =============================================================
#
## QR 코드 생성 - 링크 연결
#
# =============================================================
# ! pip install qrcode[pil]
import qrcode
# QR 코드 생성
qr = qrcode. QRCode(
version=2, # 크기
error_correction=qrcode.constants.ERROR_CORRECT_H, # 오류 복원율
box_size=10, # 박스 크기
border=4 # 테두리 두께
)
# 데이터 저장
qr.add_data("https://wewegh.tistory.com/")
qr.make(fit=True)
# 이미지 렌더링 및 저장
qr_img = qr.make_image(fill_color="orange", back_color="white")
qr_img.save("sample_qrcode.png")
# =============================================================
#
## QR 코드 생성 - 링크 연결 + 텍스트 추가
#
# =============================================================
import qrcode
from PIL import Image, ImageDraw, ImageFont
# QR 코드 생성
qr = qrcode. QRCode(
version=2, # 크기
error_correction=qrcode.constants.ERROR_CORRECT_H, # 오류 복원율
box_size=10, # 박스 크기
border=4 # 테두리 두께
)
# 데이터 저장
qr.add_data("https://wewegh.tistory.com/")
qr.make(fit=True)
# 이미지 렌더
qr_img = qr.make_image(fill_color="black", back_color="white")
# 텍스트 삽입용 원형 배경 + 텍스트
logo_size = 100
logo_img = Image.new("RGBA", (logo_size, logo_size), (255, 255, 255, 0))
draw = ImageDraw.Draw(logo_img)
# 배경 - 흰색 원
draw.ellipse((0, 0, logo_size, logo_size), fill="white")
# 폰트 설정
font_path = "C:/Windows/Fonts/arialbd.ttf" # 굵은 Arial (경로는 시스템에 따라 다름)
font = ImageFont.truetype(font_path, 40)
# 텍스트 추가
text = "GH"
text_width, text_height = draw.textsize(text, font=font)
text_x = (logo_size - text_width) // 2
text_y = (logo_size - text_height) // 2
draw.text((text_x, text_y), text, fill="black", font=font)
# 텍스트 추가
qr_width, qr_height = qr_img.size
pos = ((qr_width - logo_size) // 2, (qr_height - logo_size) // 2)
qr_img.paste(logo_img, pos, logo_img)
# 저장
qr_img.save("sample_qrcode_text.png")
# =============================================================
#
## QR 코드 생성 - 링크 연결 + 이미지 추가
#
# =============================================================
import qrcode
from PIL import Image
# QR 코드 생성
qr = qrcode. QRCode(
version=2, # 크기
error_correction=qrcode.constants.ERROR_CORRECT_H, # 오류 복원율
box_size=10, # 박스 크기
border=4 # 테두리 두께
)
# 데이터 저장
qr.add_data("https://wewegh.tistory.com/")
qr.make(fit=True)
# 이미지 렌더링
qr_img = qr.make_image(fill_color="black", back_color="white")
# 로고 이미지 로드
logo = Image.open(r"C:\Users\Desktop\logo.jpg") # 이미지 파일명 경로
# 로고 크기 조절
qr_width, qr_height = qr_img.size
logo_size = qr_width // 4 # QR 크기의 1/4
logo = logo.resize((logo_size, logo_size), Image.LANCZOS)
# 로고 추가
pos = ((qr_width - logo_size) // 2, (qr_height - logo_size) // 2)
qr_img.paste(logo, pos)
# 저장
qr_img.save("sample_qrcode_logo.png")
'Python' 카테고리의 다른 글
| [파이썬] 벌집 Hexbin 그래프 시각화와 Plotly 대체 방법: matplotlib vs plotly (2) | 2025.07.04 |
|---|---|
| [파이썬] 구글 제미나이 Gemini API 활용 방법 - API 키 발급, 예제 (4) | 2025.06.27 |
| [파이썬] OCR을 활용한 PDF/이미지 텍스트 추출 - pytesseract (0) | 2025.06.13 |
| [파이썬] 엑셀 통합파일(.xlsx) 시트별 저장 - ExcelWriter (4) | 2025.06.07 |
| [파이썬] 제21대 대선 후보 검색 트렌드 시각화 - pytrends, 네이버 데이터랩 (8) | 2025.05.27 |