您好我正在使用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上的问题,但无济于事。
任何人都可以看到我能做的事情吗?
答案 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()
重载或甚至获取另一个图像处理工具包,您也可能会幸运。