python qrcode 이미지 파일로 저장하지 않고 바로 볼 수 있나요?

조회수 1224회

python 에서 qrcode 라이브러리를 이용해서 qrcode를 생성했는데 img save를 통해 이미지 파일을 저장하더라구요.

단발성으로 생성 된 qrcode만 보여주었다가 화면에서 보이지 않게하고싶은데 png파일로 따로 저장하지 않고 바로 웹에 보이게할 수 있는 방법이 있나요?

  • 질문이 이해가 되지 않습니다. 단발성으로 생성된 qrcode만 보여주었다가(?) 화면에서 보이지 않게 하고 싶다(?) png 파일로 저장하는건 당연하겠지요. 그래야 불러다 사용할 수 있을 것 아닙니까...웹브라우져도 파일을 임시디렉토리에 다운로드 받고 보여주는 겁니다. 바로 웹에서 보이는 것은 없는 셈입니다. 정영훈 2019.11.21 10:43
  • 그건 이미 아니까 질문한 것처럼 작성했던 거고 또 다른 방법이 있는지 물어본거겠지요 김재민 2019.11.29 11:11
  • 그것을 아는지 질문을 보는 사람이 어떻게 알 수 있을까요? 정영훈 2019.11.29 14:03
  • 첫 문장에 제가 이미 경험해봤다고 써놨는데 잘 보시면 될 거같네요 김재민 2019.11.29 15:46
  • "python 에서 qrcode 라이브러리를 이용해서 qrcode를 생성했는데 img save를 통해 이미지 파일을 저장하더라구요." 문장과 웹이랑 무슨 상관이 있다는 말씀입니까? 단 두줄짜리 질문을 보고 무엇을 어느만큼 판단하라는 겁니까? 이글을 보는 사람이 질문자의 생각을 어찌 압니까? 질문을 잘 해야 합니다. 그래야 오해도 하지 않을 것이고 이해를 할 것 아닙니까. 다시봐도 "단발성으로 생성 된 qrcode만 보여주었다가 화면에서 보이지 않게하고싶은데" 라는 문장도 "보여주었다가 보이지 않게 하고 싶다" 라는 것이 무슨 말인지...... 정영훈 2019.11.29 16:05

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    말씀하시는 것은 Base64 이미지 기법으로 가능할 것 같습니다. 일반적으로 다음 순서를 따릅니다.

    1. 이미지 파일을 바이너리로 얻는다.
    2. 그 바이너리를 Base64 인코딩한 문자열을 얻는다.
    3. <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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)