Читая метаданные данных из JPEG, XMP или EXIF в C#

Я наводил справки о достойном способе считать метаданные (а именно, взятая дата) из файлов JPEG в C#, и подхожу немного короткий. Существующая информация, насколько я вижу, выставочный код как следующее;

BitmapMetadata bmd = (BitmapMetadata)frame.Metadata;
string a1 = (string)bmd.GetQuery("/app1/ifd/exif:{uint=36867}");

Но в моем незнании я понятия не имею, какой бит метаданных GetQuery () возвратит, или что передать его.

Я хочу делать попытку XMP чтения сначала, отступая к EXIF, если XMP не существует. Существует ли простой способ сделать это?

Спасибо.

15
задан hippietrail 11 November 2019 в 21:00
поделиться

3 ответа

Следующее, кажется, работает хорошо, но если в этом есть что-то плохое, я буду благодарен за любые комментарии.

    public string GetDate(FileInfo f)
    {
        using(FileStream fs = new FileStream(f.FullName, FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            BitmapSource img = BitmapFrame.Create(fs);
            BitmapMetadata md = (BitmapMetadata)img.Metadata;
            string date = md.DateTaken;
            Console.WriteLine(date);
            return date;
        }
    }
26
ответ дан 1 December 2019 в 01:45
поделиться

Я использую это для текущего проекта, только 4 Кб сокращено и никаких проблем так далеко:
jЗапрос плагин контекстного меню (abeautifulsite.net)

Прямая демонстрационная страница: Здесь

-121--4222882-

Это вполне нормально. Написав этот код, вы не перегружали метод Math.sqrt ни в одном пути, а просто определили в качестве аргумента Test.sqrt (int) .

Затем возникает вопрос о вашем сообщении об ошибке.

При определении метода Test.sqrt выполняется перегрузка (в этом классе) статического импорта.

Так, при вызове sqrt (1.0 * n) компилятор считает, что попытаться вызвать Test.sqrt (int) с двойным, swich, очевидно, невозможно.

-121--3286577-

Моя компания создает набор инструментов .NET , включающий синтаксические анализаторы XMP и EXIF.

Типичный процесс такой:

XmpParser parser = new XmpParser();
System.Xml.XmlDocument xml = (System.Xml.XmlDocument)parser.ParseFromImage(stream, frameIndex);

для EXIF вы бы сделали это:

ExitParser parser = new ExifParser();
ExifCollection exif = parser.ParseFromImage(stream, frameIndex);

очевидно, frameIndex будет равен 0 для JPEG.

-2
ответ дан 1 December 2019 в 01:45
поделиться

Я думаю, то, что вы делаете, является хорошим решением, потому что обработчик System.DateTaken автоматически применяет политику метаданных фотографии, а не возвращается к другим пространствам имен, чтобы найти, существует ли значение.

1
ответ дан 1 December 2019 в 01:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: