python qrcode 이미지 파일로 저장하지 않고 바로 볼 수 있나요?
조회수 1224회
python 에서 qrcode 라이브러리를 이용해서 qrcode를 생성했는데 img save를 통해 이미지 파일을 저장하더라구요.
단발성으로 생성 된 qrcode만 보여주었다가 화면에서 보이지 않게하고싶은데 png파일로 따로 저장하지 않고 바로 웹에 보이게할 수 있는 방법이 있나요?
1 답변
-
말씀하시는 것은 Base64 이미지 기법으로 가능할 것 같습니다. 일반적으로 다음 순서를 따릅니다.
- 이미지 파일을 바이너리로 얻는다.
- 그 바이너리를 Base64 인코딩한 문자열을 얻는다.
<img src="data:image/png;base64, 인코딩한 문자열" />
e.g.
<img src="data:image/jpeg;base64,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">
↓
위 예제를 보시면 아시겠지만 이미지가 조금만 컬러풀해도/커져도 실용적이지 못합니다. 다만, 요행히, QR코드는 단순 문자열을 2진 변환해서 흑백 이미지로 뿌리는 것이기 때문에, 이 방식을 QR코드 표출에도 사용하기는 합니다.
파이썬 라이브러리 뭐쓰시는지는 모르겠지만, 파일을 저장할 때 쓰는 그 바이너리를 가지고 파일 저장을 하는 대신 인코딩 및 웹 표출을 하도록 하면 될겁니다. 참고가 되면 좋겠네요.
- 감사합니다! 김재민 2019.11.28 17:23
- 이미지 파일을 바이너리로 얻으려면 이미지가 저장되어있어야 되는건가요? 이미지를 따로 저장하지 않고 바이너리형태로 바꿀 수 있나요? 김재민 2019.11.29 10:14
- 특정 url을 내용으로 담고 있는 QR코드 이미지 파일을 말씀하시는 건가요? 그런거라면 기존 라이브러리들을 가져다 쓰시는 걸 추천합니다. https://github.com/neocotic/qrious 엽토군 2019.11.29 10:38
- 예를 들어서 저는 'www.wxpay.test.html/testcode:xx' 이런 문자열을 QRcode로 만들어야하는데 QRcode이미지를 특정 경로에 매번 저장하지 않고 그냥 단발성으로 바로 HTML에 보여지고 새로고침 하면 사라지게끔 하려면 어떻게 해야할까요? 김재민 2019.11.29 11:08
- 그 부분 자체는 data uri 방식 쓰시면 되지요. 문제는 그 방식으로 제공할 데이터가 뭐냐는 거거든요. 그 데이터는 qr코드 이미지 바이너리일 거구요. 알아보니 그 이미지 바이너리를 얻으려면 그냥 다짜고짜 원하는 문자열을 base64 인코딩해서는 안되고 전용 라이브러리가 필요하다는 겁니다. 애초에 한번이라도 www.wxpay.test.html/testcode:xx 를 base64 인코딩해서 img src에 한번이라도 넣어보셨다면 그게 안된다는 걸 알 수 있으셨겠지요. 답변이 되었을는지요? 엽토군 2019.11.29 15:48
댓글 입력