ImageMagick.MagickResourceLimitErrorException: 'TooManyExceptions (обработка исключений приостановлена)
Я получаю эту ошибку:
ImageMagick.MagickResourceLimitErrorException: 'TooManyExceptions (exception processing is suspended) @ error/exception.c/ThrowException/969'
На этой линии
using (MagickImageCollection tiffPageCollection = new MagickImageCollection())
{
tiffPageCollection.Read(tifName); // fails here.
}
Проблема возникает из-за того, что на странице 92 есть три ошибки, подобные этой на каждой странице:
{"ASCII value for tag \"Copyright\" does not end in null byte. `TIFFFetchNormalTag' @ warning/tiff.c/TIFFWarnings/1007"} ImageMagick.MagickException {ImageMagick.MagickCoderWarningException}
Превышено количество ошибок предупреждений, что вызывает ошибки TooManyExceptions.
Этот URL ссылается на решение:
http://www.imagemagick.org/discourse-server/viewtopic.php?t=33989
добавить этот обработчик:
private void MagickNET_Log (object sender, LogEventArgs e)
{
// write to a single log file...
if ((RemoteImageMagickEventLogging & e.EventType) != LogEvents.None)
{
switch (e.EventType)
{
case LogEvents.Exception:
if (!e.Message.Contains ("TIFFWarnings"))
{
TriggerRemoteLoggingEvent (e.EventType,
EZLogger.LoggingLevel.Note1, e.Message);
}
break;
}
}
}
В нем также упоминается, что это исключение было добавлено в "ImageMagick.Net 7.4.5 Q8 AnyCPU" и не встречалось в более ранних версиях. У меня проблема с "ImageMagick.Net-Q16-AnyCPU v7.9.1". Я обновился до v7.10.0 и все еще имел ту же проблему.
Итак, мои вопросы:
Какие версии ImageMagick имеют и не имеют этой функции?
Какие шаги для передачи этого обработчика в мой код?
Есть ли способ увеличить максимальное количество разрешенных предупреждений, и я могу просто поднять этот лимит до чего-то настолько высокого, чтобы я его не ударил?
2 ответа
Эта проблема была исправлена в Magick.NET 7.10.1.0: https://github.com/dlemstra/Magick.NET/releases/tag/7.10.1.0. TooManyExceptions (exception processing is suspended)
исключение больше не будет выброшено, потому что это было изменено в предупреждение.
Какие версии ImageMagick имеют и не имеют этой функции?
Из журнала изменений он был добавлен еще в версии 7.0.7-22. Основная работа вокруг этой функции была в ответ на проект Google OSS-fuzz.
Есть ли способ увеличить максимальное количество разрешенных предупреждений, и я могу просто поднять этот лимит до чего-то настолько высокого, чтобы я его не ударил?
Не сейчас. Предел жестко закодирован MagickCore/exception.c
как...
#define MaxExceptionList 64
Но это с открытым исходным кодом, и довольно новая функция. Если вы опубликуете проблему на доске объявлений"Ошибки", вы можете попросить разработчиков пересмотреть ограничение или разрешить пользователю управлять атрибутом какого-либо ресурса в polices.xml. Также полезно представить реальный контрольный пример, и файл TIFF с более чем 64 предупреждениями должен потребовать некоторого уровня проверки.