我收到此错误:
ImageMagick.MagickResourceLimitErrorException: 'TooManyExceptions (exception processing is suspended) @ error/exception.c/ThrowException/969'
在此行
using (MagickImageCollection tiffPageCollection = new MagickImageCollection())
{
tiffPageCollection.Read(tifName); // fails here.
}
发生此问题是因为92页的tif在每个页面上都出现三个错误:
{"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”中,并且在较早版本中未发生。我在更新到v7.10.0的“ ImageMagick.Net-Q16-AnyCPU v7.9.1”上遇到问题,仍然有同样的问题。
所以,我的问题是:
ImageMagick的哪些版本具有和不具有此功能?
将该处理程序交给我的代码有哪些步骤?
是否可以增加允许的最大警告数量,而我可以将该限制提高到一个很高的水平,以至于我不会触及它?
答案 0 :(得分:1)
ImageMagick的哪些版本具有和不具有此功能?
从changelog开始,它最早是在7.0.7-22版中添加的。解决此功能的工作是针对Google's OSS-fuzz project。
有没有办法增加允许的最大警告数量,而我可以将该限制提高到一个很高的水平,以至于我不会达到它?
目前不行。该限制被硬编码为MagickCore/exception.c
为...
#define MaxExceptionList 64
但这是开源的,是一个相当新的功能。如果您在“错误” message board下发布问题,则可以使开发人员修改该限制,或者允许polices.xml下的某些资源属性由用户控制。呈现真实的测试用例也有帮助,带有64个以上警告的tiff文件应进行一定程度的审查。
答案 1 :(得分:1)
Magic.NET 7.10.1.0:https://github.com/dlemstra/Magick.NET/releases/tag/7.10.1.0已解决此问题。 TooManyExceptions (exception processing is suspended)
异常将不再引发,因为它已更改为警告。