"참된 지혜는 실용적인 지식들의 무분별한 집적을 통해서 얻어지는것이 아니라, 모든것들을 통해서 자신을 드러내는 하나의 것을 파악하는데 있다. " - 헤라클레이토스 -

!.. Tip

[python] imghdr.what() 및 지원 이미지

rosehill 2024. 9. 6. 13:49
imghdr.what()관련.

 

  • 요샌 이미지가 참 종류가 많아진것같은데, avif니 jfif니등등.. 일단, 통상 위에서 '이미지 파일들'은 이미지라고 여겨지는 것들을 말하는데, 통상 imghdr.what()에서 이미지로 판단하고 있는것들에 한해서 말한다. imghdr.what(imagefile)에서 웬만하면 이런 이미지들을  이미지로 포착한다. 어쨌던 우린 통상 jpg나 bmp나 gif, png등을 주로 사용하니 사실 이런것들이 크게 문제되지는 않는다.. 
    (이 부분은 imghdr.what()에서 goto definition을 통해 이동하면 자세히 볼 수 있다.)
  • imghdr.what(imgPath)는 이미지를 읽어들여서 이미지로 판단되면 해당되는 이미지가 무엇인지 그 값을 리턴하는데, 통상 이미지의 확장자의 이름과 같다. 만일 이미지가 아니라고 판단하면 None을 리턴한다. 이걸 이용하여 이미지가 아닌것들을 솎아 낼 수 있는것이다. 
  • 확장자를 리턴함은 단순히 파일의 끝자리에 있는 확장자를 리턴하는것이 아니라, 실제로 이미지임을 판단한 후에 그 이미지가 무엇인지를 리턴하는데 그것이 우리가 통상 알고 있는 확장자의 이름으로 리턴을 시킨다. 그러니까, 만일 어떤 flower.jpg라는 이름이 있을때, 이 이미지가 위치한 절대 경로를 보내면, 이 애는 리턴값으로 'jpeg'를 리턴한다는것이다. 그런데, 만일 저 똑 같은 그림 파일을 내가 인위적으로 듣보 확장자로 바꾼다고 해도.. 예를들어 flower.tpt 라고해도, 이 경로를 알려줘서 imghdr.what('c:\flower.tpt') 확인 해보면 얘는 여전히 'jpeg'를 리턴하는것을 확인 할 수 있다.(만약에 그림파일의 확장자를 다 지우거나 해서 뭔지 모를경우, 원래의 확장자로 복원도 가능할것이다.)
  • 지원되는 이미지 형식들.. (avif는 현재 지원되지 않는듯 하다.)

지원되는 이미지 형식들. 및 간단한 예제 출처 : https://docs.python.org/ko/3/library/imghdr.html#imghdr.what

 

한글이름이 들어간 파일도 잘 읽어 들이면서 결과값을 출력하기때문에, 이것을 이용해서 하나의 리스트안에 이미지와 이미지로 인정되는것들을 가려내어 따로 담을 수 있지만,  opencv에서는 한글 지원이 되지 않기 때문에 이 작업은 또 따로 해줘야 한다. 또한 디렉토리같은 경우는 예를들어 imghdr.what('c:\image'')일경우 None을 리턴하는게 아니라 자체 에러가 발생되므로, 이 작업은 이미지를 가려내기 그 이전에 해결해 줘야 한다.