Получаем местонахождение через GPS-инфо в изображении
| Июль 17th, 2010Многие мобильные телефоны оснащенные GPS навигаторами вставляют информацию о местонахождении в фотографию(т.е. в EXIF).
На написание этого скрипта подвигло выступление одного хакера создавшего сайт мониторинга местоположения через сервис Twitter’a.
В общем для работы скрипта необходимо установить модуль Image::EXIF (sudo cpan -i Image::EXIF), возможно, также придется установить и другой пакет, если первый не будет собираться (sudo cpan -i YAML возможно еще и sudo apt-get install libexif-dev), на выходе получаем собственно сами координаты и название места, где было сделано фото.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #!/usr/bin/perl # GPS targeting via EXIF info from your mobile if ($#ARGV != 0) { print "usage: perl cam_gps.pl FILE_NAME\n"; exit; } use Image::EXIF; use LWP::Simple; use Term::ANSIColor; $filename = $ARGV[0]; my $exif = new Image::EXIF; $exif->file_name($filename); my $image_info = $exif->get_image_info(); my $Lat = @$image_info{'Latitude'}; my $Long = @$image_info{'Longitude'}; if (!$Lat){ print "GPS info NULL\n"; exit(); } $Lat =~ s/N//i; $Lat =~ s/S/-/i; $Lat =~ s/\.//i; $Lat =~ s/\'//i; $Lat =~ s/\ //i; $Lat =~ s/([0-9]{1,}).*([0-9]{1,}).([0-9]{1,4})/\1.\2\3/i; $Long =~ s/W/-/i; $Long =~ s/E//i; $Long =~ s/\.//i; $Long =~ s/\'//i; $Long =~ s/\ //i; $Long =~ s/([0-9]{1,}).*([0-9]{1,}).([0-9]{1,4})/\1.\2\3/i; my $coord = $Lat.",".$Long; print color 'green'; print "Coord: ".$coord."\n"; print color 'reset'; my $url = "http://maps.google.com/maps/geo?q=".$coord."&output=csv&oe=utf8"; my $content = get $url; $content =~ s/[0-9]+\,[0-9]+,\"(.*)\"/\1/i; print color 'red'; print "Photo from: ".$content."\n"; print color 'reset'; |
UPD: cam_gps_exif — в архив кинул сам скрипт, тестовое изображение и маленькую инструкцию.
