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

  • 이미지를 이용하는 서비스를 운영하는 경우 정말 다양한 확장자의 이미지 파일들을 다루게 되는데요.
  • 대표적인 이미지 타입인 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빵)

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

집빵

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

피라미드빵

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

판다빵(일명 푸바오빵)

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

리얼피카츄빵

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

IntelliJ Idea Remote Development 사용시 한글 타이핑 거꾸로 입력되는 문제 해결

  • IntelliJ Idea Remote Development 에서 한글을 입력하면 거꾸로 입력되는 현상 때문에 고생을 했었습니다.
  • 예를들어 저는 “우리말”이라고 입력했는데, 에디터에는 “말리우”라고 나타나 있는것이죠.
  • 상황이 아래 처럼 발생합니다.
    • Alt text
  • 플러그인도 깔아보고 OS의 한글 세팅이 문제인지 이것저것 조치를 해보았지만 해결되지 않았었는데요.
  • 저와 같은 문제를 보고한 유저가 있었더라구요.

해결방법

  • 해결방법은 너무 간단한데요… IDE를 업데이트 하는 겁니다.
  • 여기서 중요한건 본체가 되는 Intellij IDE가 아니라 원격에 깔려있는 Intellij IDE를 업데이트 해야 한다는 점 인데요.
  • 방법은 아래와 같습니다.
    • 먼저 점3개 버튼을 클릭하고 Select Diffrent IDE…을 클릭하세요. 참고로 위에 체크되어 있는건 현재 사용중인 버젼입니다.
      • Alt text
    • 그럼 아래와 같은 화면이 나오는데, 여기서 최신버전을 설치해주세요.
      • Alt text
    • 만약 과거 버전을 지우고 싶다면? 아래와 같이 설정버튼을 클릭하고, Manage IDE Backends…을 클릭하세요.
      • Alt text
    • 그런 다음 삭제하고 싶은 버전의 X 버튼을 클릭하면 됩니다.
      • Alt text
  • 최신 버전으로 설치하니까 한글입력이 잘 됩니다. 이로인해 생산성이 많이 향상되었습니다.