컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Thursday, May 10, 2007

Perl 펄] EXIF 정보 읽기, 디카 촬영 정보 출력 소스; Exif Info Dump


디카로 찍은 사진 파일 속의 EXIF 정보를 읽어서 화면에 출력하는 펄 프로그램입니다. 소스는 짧고 간단하지만 극히 자세한 정보까지 다 나옵니다. 심지어 카메라의 시리얼 넘버까지 다 나오더군요.

그런데 일부 정보는 텍스트가 아닌 이진 데이터 (Binary Data) 로 출력되기에, 헥사(Hex) 로 변환 출력해 주었습니다. 이진 데이터를 화면에 곧바로 출력하면 이런저런 문제가 생길 수 있기 때문입니다.


다음의 외부 모듈을 다운받아서 설치해 주어야 아래의 소스를 실행할 수 있습니다: ▶▶ Perl 펄] Image::ExifTool::Exif 모듈 다운로드 설치법

Perl로, 디카의 조리개 값, 셔터 속도 등 출력


파일명: exifdump.pl
#!/usr/bin/perl
use strict; use warnings;

  die "Input photo filename...\n" if ($#ARGV == -1);
  die "Not a valid file...\n" if not (-f $ARGV[0]);

  use Image::ExifTool;

  my $exifTool = new Image::ExifTool;
  $exifTool->Options(Unknown => 1);
  my $info = $exifTool->ImageInfo($ARGV[0]);
  my $group = '';
  my $tag;

  foreach $tag ($exifTool->GetFoundTags('Group0')) {
    if ($group ne $exifTool->GetGroup($tag)) {
      $group = $exifTool->GetGroup($tag);
      print "---- $group ----\n";
    }

    my $val = $info->{$tag};

    if (ref $val eq 'SCALAR') {
      if ($$val =~ /^Binary data/) {
        $val = "($$val)";
      } else {
        my $len = length($$val);
        $val = "(Binary data $len bytes)";
      }
    }

    $val = stringToHex($val) if (!isPrintableString($val));
    printf("%-32s : %s\n", $exifTool->GetDescription($tag), $val);
  }




sub isPrintableString {
  my @a = unpack "C*", $_[0]; # 문자열을, 1바이트씩 분리하여 배열로 만들기

  foreach (@a) {
    next if ($_ == 0x0A || $_ == 0x0D || $_ == 0x09);
    return 0 if ($_ < 0x20 || $_ > 0x7E); # 키보드로 입력할 수 없는 문자일 경우는 거짓(false) 반환
  }
  return 1; # 그밖의 경우는 참(true) 반환
}


sub stringToHex {
  my @a = unpack "C*", $_[0]; # 문자열을, 1바이트씩 분리하여 배열로 만들기
  my $s = "";

  foreach (@a) {
    $s .= sprintf("%02X ", $_);
  }
  return $s;
}


실행 결과 화면은 여기에 있습니다: ▶▶ NIKON D40X: Full Exif Info Dump; 니콘 DSLR 촬영 정보

그리고
exifdump.pl test.jpg > out.txt
이렇게 실행하면, 화면 출력 결과가 out.txt 라는 파일로 저장됩니다.



메타 정보를 파일명으로 자동 변경 유틸리티: ▶▶ Perl 펄] 디카 메타 정보를, JPG, RAW (NEF) 파일명으로 변경 유틸리티; Exif to Filename



0 Comments:

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top