IT Knowledge Base

~ Without sacrifice, there can be no victory ~

發佈日期:

如何在PHP中‧利用exif_read_data函數存取JPG圖檔EXIF GPS數據

01. 先將JPG檔案放置於一個資料夾內。

02. 針對資料夾內JPG檔案,用exif_read_data函數存取經緯數據,再將資料寫入TXT檔案內。同時,設置連結到Google Map,以便查看JPG檔案拍攝實際位置。

<?php
$output = "gps.txt";
file_put_contents($output, "");
foreach (glob("photos/*.jpg") as $f) {
$exif = exif_read_data($f, 0, true);
foreach ($exif as $key) {}
$n = (float)$key["GPSLatitude"][0] + (float)$key["GPSLatitude"][1]/600000000;
$e = (float)$key["GPSLongitude"][0] + (float)$key["GPSLongitude"][1]/600000000;
$lat = $key["GPSLatitudeRef"];
$long = $key["GPSLongitudeRef"];
$d = $f.','.$n.$lat.','.$e.$long;
echo $d.' <a href="https://www.google.com/maps/place/'.$n.$lat.','.$e.$long.'">Link</a><br />';
file_put_contents($output, $d.PHP_EOL, FILE_APPEND);
}
?>


03. TXT檔案已建立,就可以用file函數,以一行行方式讀取,再放入陣列(ARRAY)裡面。為方便存取,可將陣列設置為全域變數(global variable)。

<?php
global $gps;
$gps = [];
$lines = file("gps.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
array_push($gps,str_getcsv($line));
}
print_r($gps);
?>


04. 最後,如需要在陣列中,用檔案名稱比對有關GPS數據資料,可以用array_search函數。

<?php
global $gps;
$index = array_search($look_for_filename, array_column($gps, '0'));
echo 'Filename: '.$gps[$index][0];
echo 'Latitude: '.$gps[$index][1];
echo 'Longitude: '.$gps[$index][2];
?>

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *