하루에 5분씩만 투자해서 함께 공부해요~ 댓글은 개별 포스트 클릭하면 작성가능합니다~

AWS API-GATEWAY에서 이미지 파일을 읽어보자

  • API-GATEWAY를 통해서 Rest API를 구현할 경우 기본적으로 텍스트 형태의 반응값을 받게 됩니다.
  • 그런데 프록시 서버등을 통해서 이미지 파일을 그대로 전달받는 경우, 결과가 이진(BINARY) 데이터여야만 하죠
  • 이럴 때 설정을 어떻게 하는지 소개해보고자 합니다.
  • 먼저 API 설정 메뉴로 가주세요.

STEP1

  • 거기서 이진 미디어 유형 관리를 선택해주세요. 그런 다음 아래처럼 image/png를 입력해주세요.

STEP2

광고를 클릭해주시면 블로그운영에 큰 힘이 됩니다.
  • 그런 다음에 해당 리소스 상의 메소드에서 “메서드 응답” 탭으로 이동합니다. 편집을 클릭해서 아래와 같이 입력합니다.
    • 이렇게 Content-Type을 설정해 줘야 합니다.

STEP3

  • 마지막으로 “통합 응답” 택에서 편집을 클릭해주세요.
    • 콘텐츠 처리를 “이진으로 변환”으로 지정하고
    • 아까 입력한 Content-Type을 ‘image/png’로 입력해주세요. 여기서 중요한 점은 작은따옴표를 함께 입력한다는 점 입니다.

STEP4

  • 그러면 이미지가 온전히 전달되는 것을 확인 할 수 있습니다.

STEP5

  • 제대로 설정이 되지 않으면 {"message": "Internal server error"}가 출력된다던가, 이진 파일이 텍스트로 출력되는 결과가 나타날수도 있으니 위 과정을 그대로 따라해주세요.

파이썬에서 이미지 파일의 진짜 속성을 알아보자

  • 이미지를 이용하는 서비스를 운영하는 경우 정말 다양한 확장자의 이미지 파일들을 다루게 되는데요.
  • 대표적인 이미지 타입인 PNG,JPG는 물론이거니와 최근에 많이 사용하는 HEIC나 WEBP등의 파일도 처리해야 하는 경우가 있습니다.
  • 이와 관련해서는 제 블로그에 포스팅을 남긴바가 있죠.
  • 그런데 간혹가다가 확장자는 PNG인데 파일의 진짜 속성은 그렇지 않은 파일이 업로드되는 경우도 경험하게 됩니다.
  • 즉, 파일의 확장자만 믿고 해당 파일타입으로 이미지를 로딩하면 문제가 발생할 수 있다는 의미입니다.
  • 이럴때 파이썬에서 사용할 수 있는 방법들이 몇 가지 있는데요. 먼저 내장된 패키지인 mimetypes를 생각해 볼 수 있을겁니다.
    • 아래 이미지를 heic, jfif, webp, jpg, png 형태로 각각 저장하여 mimetypes를 이용해서 파일속성을 판단해 보겠습니다.
      • 사용이미지
    import mimetypes

    print("\n\nUse Mimetypes\n")
    print(mimetypes.guess_type("./test/imgs/1.heic"))
    print(mimetypes.guess_type("./test/imgs/2.jfif"))
    print(mimetypes.guess_type("./test/imgs/3.webp"))
    print(mimetypes.guess_type("./test/imgs/4.jpg"))
    print(mimetypes.guess_type("./test/imgs/5.png"))
  • 이러면 결과는 아래처럼 나타납니다.
    Use Mimetypes
    
    (None, None)
    (None, None)
    (None, None)
    ('image/jpeg', None)
    ('image/png', None)
    
  • 결과를 보면 PNG, JPG를 제외하고는 속성 파악을 못하는 것으로 확인되는데요.
  • 그렇다면 heic, jfif, webp를 png로 확장자만 바꾸고 같은 소스를 실행하면 어떻게 될까요?
    Use Mimetypes
    
    ('image/png', None)
    ('image/png', None)
    ('image/png', None)
    ('image/jpeg', None)
    ('image/png', None)
    
  • 세 경우 모두 확장자인 PNG로 인식하게 됩니다. 즉, 진짜 이미지의 파일속성을 알고 싶다면 mimetypes는 쓰지 않는게 좋아요.
  • 다음으로 imghdr을 이용해서 확인해 봅시다.
    • 같은 이미지를 사용했구요, png로 바꾼 세개의 파일도 그대로 사용합니다. 아래처럼 소스코드를 작성해보았습니다.
      import imghdr
      
      print("\n\nUse Imghdr\n")
      print(imghdr.what("./test/imgs/1.png")) #원래 heic
      print(imghdr.what("./test/imgs/2.png")) #원래 jfif
      print(imghdr.what("./test/imgs/3.png")) #원래 webp
      print(imghdr.what("./test/imgs/4.jpg"))
      print(imghdr.what("./test/imgs/5.png"))
      
    • 그리고 결과는 다음과 같습니다.
      Use Imghdr
      
      None
      jpeg
      webp
      jpeg
      png
      
    • imghdr은 heic는 파악하지 못하는 것으로 보이구요, jfif는 JPG의 변형판 같은거라 같은 JPG로 나옵니다.
  • heic를 파악하지 못하는 아쉬움으로 인해 다른 대안을 찾아봐야 겠군요. python-magic을 사용해 봅시다.
    • 이번에도 역시 같은 이미지를 사용했습니다.
      import magic
          
      print("Use Magic\n")
      print(magic.from_file("./test/imgs/1.png", mime=True)) #원래 heic
      print(magic.from_file("./test/imgs/2.png", mime=True)) #원래 jfif
      print(magic.from_file("./test/imgs/3.png", mime=True)) #원래 webp
      print(magic.from_file("./test/imgs/4.jpg", mime=True))
      print(magic.from_file("./test/imgs/5.png", mime=True))
      
    • 결과를 보면 다음과 같습니다.
      Use Magic
      
      image/heic
      image/jpeg
      image/webp
      image/jpeg
      image/png
      
    • 다행이군요, python-magic은 heic까지 판별해냅니다.

AI가 그려본 상상속의 빵

  • 세상에 이런 빵이 있으면 어떨까? 하고 상상을 해보는 경우가 있는데요.
  • AI를 이용해서 한 번 그려봤어요. 과연 이런 빵이 있다면 여러분은 먹을 수 있겠나요?

호랑이빵

  • 호랑이빵
  • 저희 아가가 호랑이띠 이고 태명이 어흥이라서, 와이프랑 나중에 호랑이빵 한 번 만들어보자고 했었는데…
  • 이렇게 무섭게 생기면 안될 것 같네요.

사자빵

  • 사자빵1
  • 사자빵2
  • 호랑이빵 보다는 귀엽긴한데, 눈이랑 수염이 너무 디테일해서 못 먹을것 같아요 ㅠㅠ

UFO빵

  • UFO빵
  • 처음으로 먹을 수 있을것 같은 빵이 나왔는데, 정작 UFO 모양인 줄 모르겠네요 ㅋㅋ

비트코인빵

  • 비트코인빵
  • 빵위에 초콜릿 비트코인 로고가 올라간 빵이군요. 가상화폐 투자를 안해서 모르겠지만, 가격이 빵원될까봐 투자자들이 먹지 않을 것 같아요.

태양빵(일명 선SUN빵)

  • 태양빵
  • 가운데에 태양무늬는 계란이나 크림으로 만들면 되겠군요. 쌍화차 위에 노른자 같기도 하고….

집빵

  • 집빵
  • 이걸 빵으로된 집이라고 해야 할지, 집으로 된 빵이라고 해야 할지… 생기면 인기는 있을듯. 단 만들기가 매우 어려워 보이네요…

피라미드빵

  • 피라미드빵
  • 왠지 이집트에서 팔고 있을 것 같은 빵입니다.

판다빵(일명 푸바오빵)

  • 판다빵
  • 이건 빵이라기 보다는 비스킷 같군요. 근데 이걸 어떻게 먹어 ㅠㅠ

리얼피카츄빵

  • 리얼피카츄빵
  • 왠지 프로제빵사가 마음먹고 만들면 이렇게 만들 수 있을것 같은 생김새의 리얼피카츄빵이에요.
  • 하지만 이걸 먹는 잔인한 사람은 없겠죠? ㅠㅠ