JPEGからEXIF情報を取得

JPEGからEXIF情報を取得したく調べました。
JPEGからEXIFを抜いて、Google Mapsで表示する
http://blog.livedoor.jp/dankogai/archives/51262202.html
ひとまず実装したので、細かいところは、今後修正します。
JS Source:
“yourkey”は各自取得して設定してください

 <script type="text/javascript" src="http://www.google.com/jsapi?key=yourkey"></script>
(function(d){
var gmap = {};
google.load('maps', '2');
google.setOnLoadCallback(function(){
    gmap.map = new google.maps.Map2(d.getElementById('gmap'));
    gmap.map.addControl(new GSmallMapControl());
    gmap.map.addControl(new GMapTypeControl());
    gmap.geocoder = new google.maps.ClientGeocoder();
});
window.onunload=function(ev){  GUnload() }
var dms2deg = function(src){
  var deg = 0; /* 45 deg 26' 1.80" N */
  src.replace(/(\d+)\D*(\d+)\D*(\d+\.\d+)\D*([NSEW])/, function(a,d,m,s,nsew){
    deg = parseInt(d,10) + parseInt(m,10)/60 + parseFloat(s)/3600;
    deg *= nsew === 'N' ? 1 : nsew === 'E' ? 1 : -1;
  });
  return deg;
};
JSONP = {
  get:function(uri, cb){
    if (!cb) cb = 'JSONP.run';
    d.getElementById('exifsrc').src = uri;
    var u = ['http://api.dan.co.jp/exif', cb, uri].join('/');
    var s = d.createElement('script');
    s.charset = 'UTF-8';
    s.id = s.src = u;
    d.body.appendChild(s);
  },
  run:function(json){
    var point = new GLatLng(
        dms2deg(json.GPSLatitude),
        dms2deg(json.GPSLongitude)
    );
    gmap.map.setCenter(point, 12);
    var marker = new google.maps.Marker(point);
    gmap.map.addOverlay(marker);
    var html = [
      '緯度:' + point.y,
      '経度:' + point.x,
      '日時:' + json.DateTimeOriginal
    ].join('<'+'br>');
    google.maps.Event.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html);
    });
  }
}
})(document);

exif.cgi

#!/usr/local/bin/perl
#
# $Id: exif.cgi,v 0.1 2009/08/01 06:00:53 dankogai Exp dankogai $
#
use strict;
use warnings;
use LWP::UserAgent;
use CGI;
use CGI::Carp qw/fatalsToBrowser/;
use Image::ExifTool;
use JSON::Syck;
my $q = CGI->new;
my ( $callback, $uri ) = ( $q->path_info =~ m,^/([^/]+)/(.*),o );
$callback or die 'no callback!';
$uri =~ s,^(https?:)/+,$1//,o
  or die 'invalid scheme: ', $q->escapeHTML($uri);
$uri .= '?' . $ENV{QUERY_STRING} if $ENV{QUERY_STRING};
my $res = LWP::UserAgent->new->get($uri);
die "$uri ", $res->status_line unless $res->is_success;
die "$uri ", $res->headers->header('content-type'), " is not supported"
  unless $res->headers->header('content-type') =~ m{\Aimage/jpeg};
my $image = $res->content;
my $tool = Image::ExifTool->new;
my $exif = $tool->ImageInfo( \$image );
$exif->{uri} = $uri;
print
  "Content-Type: application/x-javascript; charset=utf-8\n\n",
  "$callback(", JSON::Syck::Dump( $exif ), ");\n";

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です