ImageMagick Преобразование файла .tif в .pdf — вызывает MagickCoderErrorException

Все,

Env: .net 2.0, сборка x64 библиотеки Magick.NET

У меня есть следующий код, в котором я читаю файл .tif и хочу преобразовать его в .pdf.

using (MagickImage image = new MagickImage())
        {
            image.SetDefine(MagickFormat.Tiff, "ignore-tags", "32934");
            image.Read(sourceFilePath);;

            image.Write(targetFilePath);
        }

image.Read() выдает MagickCoderErrorException, а внутреннее исключение MagickCoderWarningException жалуется на:

ImageMagick.vshost.exe: обнаружено неизвестное поле с тегом 32934 (0x80a6). `TIFFReadDirectory' @warning/tiff.c/TIFFWarnings/880

Вы можете ясно видеть в моем коде, что я дал указание библиотеке игнорировать этот тег, и все же я получаю это исключение. Почему? Кстати, когда я ловлю исключение, ничего не делаю и вызываю image.Write(my.pdf), я получаю сгенерированный PDF-файл, но я не хочу просто игнорировать исключения, если я делаю что-то не так.


person ActiveX    schedule 19.08.2015    source источник


Ответы (2)


Похоже, что исключение Error Exception было вызвано неправильной обработкой исключения Warning Exception.

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

 try {
   image.Read(sourceFilePath);
 } catch (MagickCoderWarningException err) {
   // Evaluate if this exception will introduce undesired behavior
   // If yes... re-throw 
   throw new Exception('This is undesired', err);
 }
 image.Write(targetFilePath);

Почему?

Я настоятельно рекомендую перейти на форумы ImageMagick и узнать, почему такое поведение является ожидаемым. . Но не отчаивайтесь и не разочаровывайтесь, если единственным ответом будет "Все в порядке" или "Просто не обращайте на это внимания".

person emcconville    schedule 20.08.2015
comment
Ваш код не будет работать, поскольку исключение предупреждения является внутренним исключением MagickException. Я не знаю, что вы подразумеваете под этим: похоже, что исключение ошибки было вызвано, потому что исключение предупреждения не было обработано правильно. Согласно документации, игнорирование указанных тегов должно иметь исключения с предупреждением о тишине, которых нет. Я добавил аналогичный код, в котором я перехватываю корневое исключение, проверяю внутреннее исключение и смотрю, является ли оно предупреждающим исключением, и игнорирую его, но это дорого, когда возникают эти исключения, в идеале вы не должны создавать исключения. - person ActiveX; 25.08.2015

Все,

Эта проблема была устранена путем добавления автором поддержки игнорирования тегов в библиотеке Magic.net, проверьте выпуск Magick.NET 7.0.0.0018.

person ActiveX    schedule 01.09.2015