【问题标题】:ImageSharp Specified Method is not supported不支持 ImageSharp 指定方法
【发布时间】:2017-10-18 19:24:45
【问题描述】:

您好,我使用的是 ImageSharp 版本 1.0.0-alpha9-00175。当我使用

.Save(output, ImageFormats.Jpeg); 

我得到以下信息

这是我的代码

   input.Seek(0, SeekOrigin.Begin);
        using (Image<Rgba32> image = Image.Load<Rgba32>(input))
        {

            if (image.Width >= image.Height)    //landscape
            {
                ratio = image.Height / defaultWidth;                  
            }
            else //portrait
            {
                ratio = image.Width / defaultHeight;                   
            }

            image.Resize(image.Width / ratio, image.Height / ratio)
               .Crop(defaultWidth, defaultHeight)                   
                .Save(output, ImageFormats.Jpeg);
        }

如果我注释掉 .Save 行,代码将毫无例外地运行,但显然不会保存。我查看了 stackoverflow 和 Github 上的问题,但无济于事。

谁能看到我看不到的东西?

【问题讨论】:

    标签: c# image-processing asp.net-core-mvc image-resizing imagesharp


    【解决方案1】:

    因此,在接受了@Waescher 的建议后,我在 Github 上使用 ImageSharp 打开了一个问题,结果发现答案正盯着我看。该错误不是由 ImageSharp 引发的,而是由我试图写入的底层流引发的。

    Microsoft.AspNetCore.Http.Internal.ReferenceReadStream.Write(byte[] buffer, int offset, int count)
    

    我添加了一个新的 MemoryStream 并使用该代码现在可以工作。

    MemoryStream outputs = new MemoryStream(); 
    
    image.Resize(image.Width / ratio, image.Height / ratio)
               .Crop(defaultWidth, defaultHeight)                   
                .Save(outputs, ImageFormats.Jpeg);
    

    感谢各位的帮助。 #LearningEveryDay

    【讨论】:

      【解决方案2】:

      由于您使用的是 ImageSharp 的 alpha 版本,因此可能无法通过所有代码路径进行测试。如果您查看调用堆栈,您会看到这一行:

      Microsoft.AspNetCore.Http.Internal.ReferenceReadStream.Write(byte[] buffer, int offset, int count)
      

      如果切换到aspnet's HttpAbstractions repository on GitHub,可以看到抛出异常的那一行:

      ReferenceReadStream : Line 168

          public override void Write(byte[] buffer, int offset, int count)
          {
              throw new NotSupportedException();
          }
      

      因此,除了参与这些项目之外,您现在无能为力。至少您可以在给定的存储库中打开一个问题。您还可以通过尝试其他 Save() 重载甚至获得另一个图像处理工具包来幸运。

      【讨论】:

      • 库没有问题,它是一个读取流,因此无法写入。我们无法真正对此进行测试,也不应该这样做。
      猜你喜欢
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多