代码之家  ›  专栏  ›  技术社区  ›  Be Kind To New Users

imagemagick.magickResourceLimitErrorException:'toomanyExceptions(异常处理被挂起)

  •  0
  • Be Kind To New Users  · 技术社区  · 6 年前

    我得到这个错误:

    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”中,并且在早期版本中没有发生。我在“imagemagick.net-q16-anycpu v7.9.1”上遇到了问题,我更新到v7.10.0,但仍然有相同的问题。

    所以,我的问题是:

    1. 什么版本的ImageMagick有并且没有这个功能?

    2. 把这个处理程序交给我的代码的步骤是什么?

    3. 有没有办法增加允许的警告的最大数量,我可以把这个限制提高到我不会碰到的高度?

    2 回复  |  直到 6 年前
        1
  •  1
  •   dlemstra    6 年前

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

        2
  •  1
  •   emcconville    6 年前

    什么版本的ImageMagick有并且没有这个功能?

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

    有没有办法增加允许的警告的最大数量,我可以把这个限制提高到我不会碰到的高度?

    目前没有。限制是硬编码的 MagickCore/exception.c 作为…

    #define MaxExceptionList 64
    

    但这是一个开放源码,一个相当新的特性。如果你在“Bug”下发布一个问题 message board ,您可以让开发人员修改限制,或者允许在 polices.xml 由用户控制。展示一个真实的测试用例也有帮助,带有64个以上警告的TIFF文件应该需要一定程度的审查。