6

JPEG からの EXIF データの読み取りに夢中になっています。簡単にできると思いました。

これまでのところ、家族のオンライン イメージ ギャラリーに対して次の手順を完了しました (C#/ASP.Net 3.5 を使用)。

  1. JPEG を含む ZIP ファイルをアップロードします (これは私の iPhone 4 のものです)。
  2. 優先命名規則を使用して、ZIP ファイル内の JPEG の名前を変更します
  3. ZIP ファイルから JPEG をイメージ フォルダーに抽出します。
  4. さまざまな用途 (サムネイルなど) のために画像のサイズを変更します。
  5. ファイル名と選択したカテゴリ ID を SQL Server に保存して、2 つを関連付けて表示できるようにします。

元の JPEG 画像から緯度と経度を抽出し、それらの値を、ファイル名とカテゴリ ID を挿入するのと同じ手順でデータベースに挿入したいと思います (手順 5)。Google Maps API を操作するには、これらの値が必要です。それを行う最も簡単な方法は何ですか?

アップデート:

ExifLib は良さそうに見えますが、次のようにすると:

double d; 
ExifReader er = new ExifReader(sFileName); 
er.GetTagValue<double>(ExifTags.GPSLatitude, out d); 

最後の行で次のエラーが表示されます。

指定されたキャストは無効です。

助言がありますか?

4

2 に答える 2

9

すべての答えをまとめるために、ここに完成したソリューションがあります。

using (ExifReader reader = new ExifReader(e.Target))
{
    Double[] GpsLongArray;
    Double[] GpsLatArray;
    Double GpsLongDouble;
    Double GpsLatDouble;

    if (reader.GetTagValue<Double[]>(ExifTags.GPSLongitude, out GpsLongArray) 
        && reader.GetTagValue<Double[]>(ExifTags.GPSLatitude, out GpsLatArray))
    {
        GpsLongDouble = GpsLongArray[0] + GpsLongArray[1] / 60 + GpsLongArray[2] / 3600;
        GpsLatDouble  = GpsLatArray[0]  + GpsLatArray[1]  / 60 + GpsLatArray[2]  / 3600;

        Console.WriteLine("The picture was taken at {0},{1}", GpsLongDouble, GpsLatDouble);

    }

}

出力:

    The picture was taken at 76.8593333333333,39.077
于 2012-01-06T09:02:52.423 に答える
2

画像から GPS メタデータを取得する別のオプションは、MetadataExtractorライブラリを使用することです。NuGet で入手できます。JPEG ファイルからの Exif GPS データをサポートし、他の多くのメタデータ タイプやファイル タイプもサポートしています。

GPS 位置情報にアクセスするには、次のコードを使用します。

var directories = ImageMetadataReader.ReadMetadata(jpegFilePath);

var gps = directories.OfType<GpsDirectory>().FirstOrDefault();

if (gps != null)
{
    var location = gps.GetGeoLocation();

    if (location != null)
        Console.WriteLine("Lat {0} Lng {1}", location.Latitude, location.Longitude);
}

iPhone 6からの出力例を次に示します。

于 2015-08-12T11:41:17.027 に答える