美味しいもの

初心に帰って調べもの。

全体表示

[ リスト ]

画像情報にGPSの情報が含まれはじめました。
PHPを使って取り出すための処理サンプルの続き。。。

exif_read_data 関数

JPEG あるいは TIFF から EXIF ヘッダを読み込む

○書式

$array = exif_read_data(
読み込む画像ファイルの名前(URL 形式は不可),
※ "Section1,Section2,..",
※ [ *true* | *false* ],
※ [ *true* | *false* ],
);
※は、オプションのため省略可能。

第一引数
読み込む画像ファイルの名前(URL 形式は不可)


第二引数
結果の配列を作成するために存在する必要のあるセクションのカンマ区切りリスト

セクションと内容
- FILE
FileName, FileSize, FileDateTime, SectionsFound

- COMPUTED
html, Width, Height, IsColor, および他の取得可能なもの。
( Height および Width は getimagesize() と同じ方法で取得した もので、その値はヘッダの一部ではありません。また、html は 通常の HTML 内で使用される height/width の 文字列です。)

- ANY_TAG
タグを有するすべての情報。例えば IFD0, EXIF, ...

- IFD0
IFD0のすべてのタグつきデータ。通常の画像ファイルでは、 ここに画像のサイズが含まれます。

- THUMBNAIL
2 番目の IFD がある場合、ファイルにサムネイルが含まれている 可能性があります。
埋め込まれたサムネイルに関するすべての タグつき情報はこのセクションに格納されます。

- COMMENT
JPEG 画像のコメントヘッダ。

- EXIF
EXIF セクションは IFD0 のサブセクションです。ここには 画像に関する詳細な情報が含まれています。
これらのエントリの ほとんどはデジタルカメラに関連するものです。

第三引数
- true :各セクションを配列とする
- false:しない

第四引数
- true :サムネイル本体を読み込む
- false:タグつきデータのみ

サンプルソース
<?php
$src = "images/sample.jpg";
$exif = exif_read_data ($src,0,true);
if ($exif){
  $section1=$exif['IFD0'];
  $orientation=$section1['Orientation'];
  $orientationval=0;
  if ($orientation==3){
    $orientationval=180;
  }else if ($orientation==6){
    $orientationval=270;
  }else if ($orientation==8){
    $orientationval=90;
  }
  
  $section2=$exif['FILE'];
  $val=round($section2['FileSize']/1024);
  echo "$val KB";
  
  $section3=$exif['COMPUTED'];
  echo "size = " .$section3['Width']." x ".$section3['Height'];
  
  $section4=$exif['EXIF'];
  if ($section4['ExifImageWidth']){
    
    $val=$section4['DateTimeOriginal'];
    echo "撮影日時: $val";
    
    $val=$section1['Make'];
    echoe "撮影メーカ: $val / 撮影機器: ".$section1['Model'];
    
    $val=$section3['ApertureFNumber'];
    echo "F値: $val";
    
    $val=$section4['ExposureTime'];
    if ( $val ){
      echo "シャッター速度 $val 秒";
    }
    
    if ( $orientationval ){
      echo "回転角度 $orientationval 度";
    }
    
    $lad = explode('/', $exif["GPS"]["GPSLatitude"][0]);
    if ($lad[0]){
      $lad2=$lad[0]/$lad[1];
      $lam = explode('/', $exif["GPS"]["GPSLatitude"][1]);
      $lam2=floor($lam[0]/$lam[1]);
      $las = explode('/', $exif["GPS"]["GPSLatitude"][2]);
      $las2=round(($lam[0]/$lam[1]-$lam2)*60+$las[0]/$las[1],2);

      $lod = explode('/',$exif["GPS"]["GPSLongitude"][0]);
      $lod2=$lod[0]/$lod[1];
      $lom = explode('/',$exif["GPS"]["GPSLongitude"][1]);
      $lom2=floor($lom[0]/$lom[1]);
      $los = explode('/',$exif["GPS"]["GPSLongitude"][2]);
      $los2=round(($lom[0]/$lom[1]-$lom2)*60+$los[0]/$los[1],2);
      
      $val1= $lad2."度".$lam2."分".$las2."秒";
      $val2= $lod2."度".$lom2."分".$los2."秒";
      $val3= $exif["GPS"]["GPSMapDatum"];
      
      echo "緯度: $val1 経度: $val2 測地系 $val3";
      
      if ($val3 == "WGS84" || $val3 == "WGS-84"){
        /*
          測地系をTOKYOに簡易変換
          ( 
            測地系とは、海上や陸上の位置を示す経緯度を表すための座標系で、
            地表にかぶせる経緯度の編み目のことです。
            
            端末で入手できる位置情報は測地系によって「TOKYO」と「WGS84」と大きく2つに分かれます.
            - TOKYO : 主に日本で使われる測地系
            - WGS84 : GPSで使われる測地系
            
            ※ezplusで入手できる測地系は基地局単位の場合「tokyo」で得られ、GPSの場合は「wgs84」となります。
            ※この2つの位置情報は異なるため、異なる測地系での計算がしたい場合は変換する必要があります。
          )
        */
        
        $BWGS84=$lad[0]/$lad[1]+$lam[0]/$lam[1]/60+$las[0]/$las[1]/3600;
        $LWGS84=$lod[0]/$lod[1]+$lom[0]/$lom[1]/60+$los[0]/$los[1]/3600;
        $BTokyo = $BWGS84 + 0.00010696*$BWGS84 - 0.000017467*$LWGS84 - 0.0046020;
        $LTokyo = $LWGS84 + 0.000046047*$BWGS84 + 0.000083049*$LWGS84 - 0.010041;
        $lad2=floor($BTokyo);
        $lam2=floor(($BTokyo-$lad2)*60);
        $las2=round(($BTokyo-$lad2-$lam2/60)*3600,2);
        $lod2=floor($LTokyo);
        $lom2=floor(($LTokyo-$lod2)*60);
        $los2=round(($LTokyo-$lod2-$lom2/60)*3600,2);
      }
      
      echo "MapFanへリンク: ";
      echo "http://www.mapfan.com/m.cgi?MAP=";
      echo "E" .$lod2 ."." .$lom2 ."." .$los2 ."N".$lad2.".".$lam2.".".$las2;
      echo "&ZM=9";
      
      echo "MapFan地図表示";
      echo "<a href=\"http://www.mapion.co.jp/c/f?el=$lod2/$lom2/$los2&scl=70000&size=954,768&uc=1&grp=MapionBB&nl=$lad2/$lam2/$las2\" Target=\"_blank\">";
      echo '<IMG SRC="http://www.mapion.co.jp/QA/user/img/mapion_2.gif" ALT="mapion" BORDER="0"></a>';
    }
  }
}
?>

この記事に

閉じる コメント(0)

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

.


みんなの更新記事