php

На днях один знакомый попросил привязать ему фотографии к местности, передав мне собственно сами фотографии и файл путевой точки в формате lmx(Nokia landmark file). Фотографий было окола ста, поэтому делать все вручную меня не вдохновляло. Тогда я написал небольшой скрипт на php.

Сразу хочу предупредить: особо программировать я не умею. Когда то давно писал модули для MapInfo в программе MapBasic, но это не то.

Используя PHP 5.2.6 и библиотеку PEL: PHP Exif Library сделал следующее:

  1. <?php
  2. require_once ("PelJpeg.php");
  3. require_once ("PelIfd.php");
  4. $res = simplexml_load_file($argv[1]);
  5. foreach ($res->xpath('//lm:latitude') as $lat);
  6. foreach ($res->xpath('//lm:longitude') as $lon);
  7. foreach ($res->xpath('//lm:altitude') as $alt);
  8. $lat_deg=(int)$lat;
  9. $lat_min=((float)$lat-$lat_deg)*60;
  10. $lat_min=(int)$lat_min;
  11. $lat_sec=(((float)$lat-$lat_deg)*60-$lat_min)*60;
  12. $lat_sec=number_format($lat_sec, 2);
  13. $lon_deg=(int)$lon;
  14. $lon_min=((float)$lon-$lon_deg)*60;
  15. $lon_min=(int)$lon_min;
  16. $lon_sec=(((float)$lon-$lon_deg)*60-$lon_min)*60;
  17. $lon_sec=number_format($lon_sec, 2);
  18. $gps = new PelIfd(PelIfd::GPS);
  19. $latitude = new PelEntryRational(0x0002,array($lat_deg,1),array($lat_min,1),array($lat_sec,100));
  20. $longitude = new PelEntryRational(0x0004,array($lon_deg,1),array($lon_min,1),array($lon_sec,100));
  21. $altitude = new PelEntryRational(0x0006,array($alt,1));
  22. foreach (glob("*.jpg") as $filename)
  23. {
  24.     $jpeg = new PelJpeg($filename);
  25.     $exif = $jpeg->GetExif();
  26.     $tiff = $exif->getTiff();
  27.     $ifd = $tiff->getIfd();
  28.     if($ifd->getSubIfd(PelIfd::GPS)==null)
  29.     {
  30.         $ifd->addSubIfd($gps);
  31.         $gps->addEntry($latitude);
  32.           $gps->addEntry($longitude);
  33.          $gps->addEntry($altitude);
  34.          file_put_contents('geo-' . $filename, $jpeg->getBytes());
  35.     }
  36. }
  37. ?>

Теперь мне достаточно поместить все изменяемые файлы в одну директорию. Туда же положить свой скрипт и файл с путевой точкой. Набрать в командной строке php my.php файл_путевой_точки и на выходе я получу свои фотографии, имеющие геотаг.

Так как это мой первый опыт программирования(на php), да и сделан он был на скорую руку, то он не без недостатков. Так он не проверяет передан ли файл путевой точки в программу. Строчки с 8-17 преобразуют координаты из формата ГГГ,ГГГГГ° в формат ГГГ°ММ'СС,СС". Если Вам известны координаты, то строчки 4-17 можно удалить. А в строчках 19-20 подставить нужные вам значения. Так же скрипт добавляет геотаг лишь тем файлам, в которых его нет. Остальные файлы он пропускает. В имена новых изображений добавляется приставка 'geo'.

Яндекс.Метрика