0

我收到此错误:

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”上遇到问题,但仍然遇到同样的问题。

所以,我的问题是:

  1. 哪些版本的 ImageMagick 有和没有这个功能?

  2. 将该处理程序交给我的代码的步骤是什么?

  3. 有没有办法增加允许的警告的最大数量,我可以将该限制提高到如此高以至于我不会达到它的程度?

4

2 回答 2

1

哪些版本的 ImageMagick 有和没有这个功能?

changelog中,它早在 7.0.7-22 版本中就被添加了。围绕此功能的工作主体是响应Google 的 OSS-fuzz 项目

有没有办法增加允许的警告的最大数量,我可以将该限制提高到如此高以至于我不会达到它的程度?

不是现在。限制被硬编码MagickCore/exception.c为...

#define MaxExceptionList 64

但这是开源的,而且是一个相当新的功能。如果您在“Bugs”留言板下发布问题,您可能可以让开发人员修改限制,或者允许用户控制policys.xml下的某些资源属性。展示一个真实世界的测试用例也有帮助,包含 64 个以上警告的 tiff 文件应该需要一定程度的审查。

于 2019-01-10T14:55:55.920 回答
1

此问题已在 Magick.NET 7.10.1.0 中修复:https ://github.com/dlemstra/Magick.NET/releases/tag/7.10.1.0 。将TooManyExceptions (exception processing is suspended)不再抛出异常,因为这已更改为警告。

于 2019-01-13T18:20:48.833 回答