不支持ImageSharp指定方法

时间:2017-08-22 10:56:11

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

您好我正在使用ImageSharp版本1.0.0-alpha9-00175。当我使用

.Save(output, ImageFormats.Jpeg); 

我得到以下内容 Not SupportedException

这是我的代码

   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上的问题,但无济于事。

任何人都可以看到我能做的事情吗?

2 个答案:

答案 0 :(得分:2)

所以在接受了@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

答案 1 :(得分:1)

由于您使用的是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()重载或甚至获取另一个图像处理工具包,您也可能会幸运。