Чтение из двух файлов (один raw, один XMP) с ExifTool - PullRequest
0 голосов
/ 04 февраля 2019

Я новичок в PERL и еще новее в ExifTool - и поэтому, вероятно, упускаю что-то довольно простое.

Цель - прочитать поля XMP из файла фотографии.Просматривая документацию exiftool как на сайте ExifTool, так и на CPAN, я смог без проблем прочитать файлы с тегами jpeg и XMP sidecar.

Проблема в том, что когда я читаю из необработанного файла, который, очевидно, не имеет пользовательских полей, я получаю ошибку с неинициализированным значением.Этого и следовало ожидать.

Итак, я хочу иметь код, который говорит: «Если вы читаете поле / тег из необработанного файла, а его там нет, посмотрите на связанный файл XMP и, если этоне удается, верните пустую строку. "

Поэтому я попытался открыть второй экземпляр ExifTool, например:

my $exifInfo = ImageInfo($filePath);

переходит к

my $exifInfoXMP = ImageInfo($filePathXMP);

Но этопродолжает терпеть неудачу.Если я читаю XMP непосредственно с самого начала, он работает просто отлично, поэтому у меня складывается впечатление, что я не могу читать две структуры ExifTool одновременно (что не может быть правильным; я должен быть здесь ошибкой),Приведенный ниже код работает, но я не могу «чередовать» условия для двух файлов.Сначала мне нужно обработать raw, затем выполнить второй проход с новым обработчиком для XMP.Зная, насколько эффективен PERL, мой подход не может быть хорошим (даже если он выполняет свою работу).

В частности, есть одна строчка, которая озадачивает меня.Если я удаляю его, ничего не работает.(это должно быть четко обозначено).

$filePath =~ s/$photoExtensions$/.XMP/i;

Эта важная строка делает то же самое, что и чтение XMP с самого начала (не мое идеальное решение).

У любого есть идея, какгде я все испортил?

Спасибо,

Paul

header [ИЗМЕНЕНО, ЧТОБЫ ПОКАЗАТЬ ВСЕ ВАРИАНТЫ;ПОКАЗАНО ВСЕГО, ИСПОЛЬЗУЕМЫЕ В ВОПРОСЕ

1 Ответ

0 голосов
/ 04 февраля 2019

Поскольку ваш код неполон, я должен спросить: вы обязательно запустили свой скрипт со следующими строками?

use strict;
use warnings;

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


ИМХО реальная проблема с вашим sub listKeywords() заключается в следующей строке:

my $exifInfo = ImageInfo($filePathXMP);

Тамздесь две проблемы:

  1. вы переопределяете переменную $exifInfo из нескольких строк ранее.
  2. вы не используете подход OO для информации о втором изображении.

Я думаю, что вы намеревались написать следующую строку:

my $exifInfoXMP = $exifToolXMP->ImageInfo($filePathXMP);
...