PYTHON] QR Code Scan

노션으로 옮김·2020년 4월 26일
0

uitility

목록 보기
10/18
post-thumbnail

설치

필요한 모듈을 설치해준다.

#apt-get install -y zbar-tools
#pip install pyqrcode
#pip install pyzbar
#pip install pypng && pip install image //qr 이미지 생성에 필요

사용

이미지 다운로드

먼저 requests를 이용한 방법이다.

import requests

url = 'http://challs.houseplant.riceteacatpanda.wtf:30004/qr?text=%60cat%20flag.txt|tail%20-c%202%60'
res = requests.get(url)
print res.content
with open('qr.png', 'wb') as f:
    f.write(res.content)

urllib을 이용한 방법이다. 전자보다 간단하다.

import urllib urllib.request.urlretrieve("http://www.example.com/songs/mp3.jpg", "mp3.jpg")

QR 코드 스캔

img = 'mp3.jpg'
print decode(Image.open(img))[0].data.decode()

부록

SRGB 변환

이미지를 requets 방식으로 다운로드 했을 경우 QR 코드 스캔시 다음과 같은 예외가 발생한다.

/usr/lib/python2.7/dist-packages/PIL/Image.py:989: UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images

따라서 SRGB로 변환하는 과정이 추가로 필요하다.(urllib을 이용할 경우는 문제가 없다.)

def convertToRGBA(path, out):
    png = Image.open(path).convert('RGBA')
    background = Image.new('RGBA', png.size, (255,255,255))

    alpha_composite = Image.alpha_composite(background, png)
    alpha_composite.save(out, path.split('.')[1], quality=80)

convertToRGBA(img, img)
print decode(Image.open(img))[0].data.decode()    

QR 코드 생성

페이로드를 QR코드로 전송해야 하는 경우도 있어, 생성하는 방법을 알아두면 좋다.

pyqrcode 모듈을 사용한다.

import pyqrcode
qr = pyqrcode.create("test1")
qr.png("test1.png", scale=6)

참조

https://stackoverflow.com/questions/27233351/how-to-decode-a-qr-code-image-in-preferably-pure-python

https://stackoverflow.com/questions/9166400/convert-rgba-png-to-rgb-with-pil

0개의 댓글