[c++] 그림 파일인지 아닌지 알 수 있는 방법 없나요?

hwayak의 이미지

c++로 작업하다가 궁금한것이 있습니다.
(g++, vc++ 둘다 해당합니다.)

어떤 파일에 대한 절대 경로를 알고 있을 때, 이 파일이 그림 파일인지 아닌지 알 수 있는 간단한 방법이 없나요?
확장자로만 검사하기에는 너무 허술한거 같아서 말이죠.

혹시 그림 파일 종류(GIF, JPEG, BMP, PNG 등...)마다 확인해야 하는 방법이 모두 동일한가요? 아니면 다른가요?

혹시 같은 그림 파일종류라도 버전이 다른 경우가 있어서 확인해야 하는 방법이 달라져야 하나요? 아니면 그럴 필요가 없는가요?

koder의 이미지

그때 그때 달라요..

openil.sourceforge.net

에 있는 라이브러리를 보면 이미지의 포맷을 판단해주는 함수가 있습니다.

근데, jpg, gif, png, bmp 만 처리할거라면 덩치큰 라이브러리 쓰는것보다 포맷문서보고 간단한게 해더체크하는 프로그램을 짜는게 훨씬 낫겠죠.

charsyam의 이미지

hwayak wrote:
c++로 작업하다가 궁금한것이 있습니다.
(g++, vc++ 둘다 해당합니다.)

어떤 파일에 대한 절대 경로를 알고 있을 때, 이 파일이 그림 파일인지 아닌지 알 수 있는 간단한 방법이 없나요?
확장자로만 검사하기에는 너무 허술한거 같아서 말이죠.

혹시 그림 파일 종류(GIF, JPEG, BMP, PNG 등...)마다 확인해야 하는 방법이 모두 동일한가요? 아니면 다른가요?

혹시 같은 그림 파일종류라도 버전이 다른 경우가 있어서 확인해야 하는 방법이 달라져야 하나요? 아니면 그럴 필요가 없는가요?

모두 틀립니다. BMP 같은 경우 중간에 DM 이라고 마크가 있다거나 뭐, 다 틀리죠. 그 부분을 처리하는 헤더 체크 루틴을 윗엣분 말씀처럼 간단하게 짜는게 좋긴합니다. ^^ 고운 하루되세요.

=========================
CharSyam ^^ --- 고운 하루
=========================

hwayak의 이미지

간단하게 GIF 파일 헤더를 체크하는 걸 짜보았는데요.

GIF 파일은 파일 가장 처음에 GIF87a 혹은 GIF89a 라는 문자가 있다고 하네요. 그런데 일반 텍스트 파일의 맨 처음에 GIF87a 혹은 GIF89a 만 써 놓을 경우에도 이 텍스트 파일을 GIF 파일이라고 판명하게 될 수 있지 않나요?

이런 경우는 어쩔 방법이 없는건가요?

Prentice의 이미지

file의 소스를 참고하시는 것은 어떨까요?

charsyam의 이미지

hwayak wrote:
간단하게 GIF 파일 헤더를 체크하는 걸 짜보았는데요.

GIF 파일은 파일 가장 처음에 GIF87a 혹은 GIF89a 라는 문자가 있다고 하네요. 그런데 일반 텍스트 파일의 맨 처음에 GIF87a 혹은 GIF89a 만 써 놓을 경우에도 이 텍스트 파일을 GIF 파일이라고 판명하게 될 수 있지 않나요?

이런 경우는 어쩔 방법이 없는건가요?

보통은 그렇죠. 그 시그너처 정도만 보고 판단합니다. 하지만, 보통 이미지 파일마다, 헤더를 보면, 어떤 값들이 가질수 있는 범위라든지 하는걸 이용해서 좀더 제대로 체크할 수 는 있습니다. 고운
하루되세요.

=========================
CharSyam ^^ --- 고운 하루
=========================

cinsk의 이미지

file(1)의 소스, 또는 ImageMagick package에 있는 identify(1)의 소스를 보시는 것도 도움이 될 것 같습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.