0

您好我正在使用 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上的问题,但无济于事。

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

4

2 回答 2

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);

谢谢你们的帮助。#天天学习

于 2017-08-22T14:51:16.340 回答
1

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

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

如果您切换到GitHub 上的 aspnet 的 HttpAbstractions 存储库,您可以看到抛出异常的行:

参考读取流:第 168 行

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

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

于 2017-08-22T11:21:11.790 回答