如何使用 ImageSharp 从磁盘加载图像并保存到流,同时保留 mimetype

Moo*_*als 2 c# asp.net-core imagesharp

我在磁盘上存储了一堆图像,图像的 mimetype 存储在数据库中。如果我想将图像保存到磁盘,我可以使用Image.Save(string)(或异步版本),而无需知道图像的 MimeType。

但是,如果我想保存到流(例如,Response.Body),那么我必须使用Image.Save(Stream, IImageEncoder).

如何获取我IImageEncoder需要保存到流中的信息(而不只是声明“我的所有图像 ar png/jpeg/bmp”并使用 eg JpegEncoder)?

Jam*_*uth 7

ImageSharp 已经可以告诉您输入图像的 mimetype。对于您的代码,如果 mimetype 与输入流不匹配,则解码将失败。

(Image Image, IImageFormat Format) imf = await Image.LoadWithFormatAsync(file.OnDiskFilename);

using Image img = imf.Image;
img.Save(Response.Body, imf.Format);

Run Code Online (Sandbox Code Playgroud)

然而,当前 API v1.0.1 中缺少的在传递格式时异步保存的能力。我们需要补充一点。

  • 如果它出错了?...使用我建议的方法,您甚至不需要存储它(除非您在其他地方需要它)。无论如何,您调用以发现要使用的编码器的所有方法都会由重载调用。相信我,图书馆是我的。 (2认同)