0

我有以下代码可以从图像中提取和显示 EXIF 信息。

    <?
    // +++++++++++++++++++++++++ //
    // +++++++ GPS EXIF +++++++ //
    // +++++++++++++++++++++++++ //

    // --- Change the 'image1.jpg' value below to the path of your file. --- //
    $Image = 'image1.jpg';

    // --- The EXIF read command --- //
    $ReadEXIFData = read_exif_data($Image, 0, true);


    // +++++++++++++++++ //
    // +++ FILE INFO +++ //
    // +++++++++++++++++ //
    // --- Get the filename --- //
    $Filename = $ReadEXIFData['FILE']['FileName'];
    // --- Get the file size --- //
    $FileSize = $ReadEXIFData['FILE']['FileSize'];
    // --- Converts to user-friendly kb, mb and gb sizes --- //
    if ($FileSize >= 1024) { $ImageFileSize = number_format($FileSize / 1024, 2).'kb'; }
    elseif ($FileSize >= 1048576) { $ImageFileSize = number_format($FileSize / 1048576, 2).'mb'; }
    elseif ($FileSize >= 1073741824) { $ImageFileSize = number_format($FileSize / 1073741824, 2).'gb'; }
    // --- Get the file height --- //
    $FileHeight = $ReadEXIFData['COMPUTED']['Height'].'px';
    // --- Get the file height --- //
    $FileWidth = $ReadEXIFData['COMPUTED']['Width'].'px';



    // +++++++++++++++++++++++ //
    // +++ GPS COORDINATES +++ //
    // +++++++++++++++++++++++ //
    // --- Get GPS hemisphire --- //
    $GPSHemisphire = $ReadEXIFData["GPS"]["GPSLatitudeRef"];

    // --- Get GPS degrees latitude --- //
    $GPSDegreesLat = intval($ReadEXIFData["GPS"]["GPSLatitude"][0]);
    // --- Get GPS minutes latitude --- //
    $GPSMinutesLat = intval($ReadEXIFData["GPS"]["GPSLatitude"][1]);
    // --- Get GPS seconds latitude --- //
    $GPSSecondsLat = intval($ReadEXIFData["GPS"]["GPSLatitude"][2]);
    //  --- Get GPS Hemisphere latitude --- // 
    $GPSSecondsLat2 = ($ReadEXIFData["GPS"]["GPSLatitudeRef"]);
    // --- Decimal Latitude goes here --- //


    // --- Get GPS degrees longitude --- //
    $GPSDegreesLon = intval($ReadEXIFData["GPS"]["GPSLongitude"][0]);
    // --- Get GPS minutes longitude --- //
    $GPSMinutesLon = intval($ReadEXIFData["GPS"]["GPSLongitude"][1]);
    // --- Get GPS seconds longitude --- //
    $GPSSecondsLon = intval($ReadEXIFData["GPS"]["GPSLongitude"][2]);
    //  --- Get GPS Hemisphere longitude --- // 
    $GPSSecondsLon2 = ($ReadEXIFData["GPS"]["GPSLongitudeRef"]);
    // --- Decimal Longitude goes here --- //


    // --- Get GPS altitude --- //
    $GPSAltitude = $ReadEXIFData["GPS"]["GPSAltitude"][0];


    ?>

然后将信息打印在 html 页面中,如下所示http://ukf.com/easyexif/easyexif3.php

问题是返回的 GPS 坐标以度/分/秒为单位。

要将它们转换为十进制,我有这个脚本:

    function toDecimal($deg, $min, $sec, $hemi) {
     $d = $deg + $min/60 + $sec/3600;
     return ($hemi=='S' || $hemi=='W') ? $d*=-1 : $d;
    }

    function divide($a) {
     $e = explode('/', $a);
     if (!$e[0] || !$e[1]) {
      return 0;
     } else {
      return $e[0] / $e[1];
     }
    }

    function getGPS() {
     global $exif;
     if ($exif) {  $lat = $exif['GPS']['GPSLatitude'];
     $log = $exif['GPS']['GPSLongitude'];
      if (!$lat || !$log) return null;
      $lat_degrees = divide($lat[0]);
      $lat_minutes = divide($lat[1]);
      $lat_seconds = divide($lat[2]);
      $lat_hemi = $exif['GPS']['GPSLatitudeRef'];
      $log_degrees = divide($log[0]);
      $log_minutes = divide($log[1]);
      $log_seconds = divide($log[2]);
      $log_hemi = $exif['GPS']['GPSLongitudeRef'];
      $lat_decimal = toDecimal($lat_degrees, $lat_minutes, $lat_seconds, $lat_hemi);
      $log_decimal = toDecimal($log_degrees, $log_minutes, $log_seconds, $log_hemi);
      return array($lat_decimal, $log_decimal);
     } else{
      return null;
     }
    }

我需要的是表单中返回的十进制对数和纬度

    $GPSDECLON
    $GPSDECLAT

所以我可以将它们与上述信息一起包含在我的 html 页面中。

我目前的 PHP 知识非常有限,我不知道如何将转换包含到我现有的脚本中。

有人可以帮忙吗??如果是这样,将不胜感激。

4

1 回答 1

0

网页上显示的秒数有问题 - 它们必须在 [0,60[

也就是说,转换就是您发布的 php 代码的第一个函数中所说的:

function toDecimal($deg, $min, $sec, $hemi) {
 $d = $deg + $min/60 + $sec/3600;
 return ($hemi=='S' || $hemi=='W') ? $d*=-1 : $d;
}

也就是说,一个度数是60分钟,一分钟是60秒。如果您在南半球,则翻转纬度,如果您在“西半球”,则翻转经度值,这些基本上只是两次测量的标志。

所以...

$GPSDECLON = toDecimal($GPSDegreesLon, $GPSMinutesLon, $GPSSecondsLon, $EWHemisphere)

其中 $EWHemisphere 是“E”或“W”,具体取决于您的 hemisphere 变量如何对其进行编码。然后它是纬度的类似线,除了你需要知道它是“N”还是“S”的标志。

希望对您有所帮助,如果我在这里遗漏了您的问题,我深表歉意...

于 2012-05-26T22:44:18.630 回答