Извлечение EXIF ​​из JPEG - PullRequest
       24

Извлечение EXIF ​​из JPEG

5 голосов
/ 23 января 2011

Я зацикливался на чтении данных EXIF ​​из моих файлов JPEG.Я думал, что это будет легко сделать.

До сих пор я выполнил следующие шаги для онлайн-галереи изображений моей семьи (используя C # / ASP.Net 3.5):

  1. ЗагрузитьZIP-файл, содержащий JPEG-файлы (из моего iPhone 4)
  2. Переименование JPEG-файлов в ZIP-файл с использованием предпочтительного соглашения об именах
  3. Извлечение JPEG-файлов из ZIP-файла в папку изображений
  4. Изменение размера изображений для различного использования (например, миниатюры и т. Д.)
  5. Сохранение имени файла и идентификатора выбранной категории на SQL Server, чтобы я мог связать их для отображения

Я хотел бы извлечь широту и долготу из исходного изображения JPEG, а затем вставить эти значения в мою базу данных в том же процессе, который вставляет имя файла и идентификатор категории (шаг № 5).Мне нужны эти значения для работы с Google Maps API.Какой самый простой способ сделать это?

Обновление:

ExifLib выглядит великолепно, но когда я делаю следующее:

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

Iполучите эту ошибку в последней строке:

Указанное приведение неверно.

Есть предложения?

Ответы [ 2 ]

8 голосов
/ 06 января 2012

Чтобы собрать все ответы, вот готовое решение.

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
1 голос
/ 12 августа 2015

Другой вариант получения метаданных GPS из изображений - использовать библиотеку MetadataExtractor .Он доступен на NuGet .Он поддерживает данные Exif GPS из файлов JPEG, а также тонну других типов метаданных и типов файлов.

Чтобы получить доступ к местоположению 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 .

...