4

我无法在 c# 中使用 SixLabors.ImageSharp 版本 - 1.0.0-beta0007 保存 jpg 图像,它会引发错误。除了 GIF、PNG、JPEG、BMP 格式的图像之外,还有什么解决方案可以解决这个问题。

抛出异常:

无法加载图像。可用的解码器:

  • GIF : Gif解码器
  • PNG:PNG解码器
  • JPEG:JPEG解码器
  • BMP:Bmp解码器

代码:

    public string ResizeImage(byte[] imageBytes, int height, int width)
    {
        byte[] image = new byte[] { };

        using (MemoryStream inStream = new MemoryStream(imageBytes))
        {
            using (MemoryStream outStream = new MemoryStream())
            {
                using (Image imageSharp = Image.Load(inStream))
                {
                    imageSharp.Mutate(x => x.Resize(width, height));
                    imageSharp.SaveAsJpeg(outStream);
                    imageSharp.Dispose();
                }

                image = outStream.ToArray();
                outStream.Flush();
                inStream.Flush();
            }
        }
        return Convert.ToBase64String(image);
    }
4

2 回答 2

5

确保流位置为零或尝试将流复制到新流然后将位置设置为零,因为有时 azure blob 服务会关闭返回的流

using (MemoryStream stream = new MemoryStream())
using (var ms = new MemoryStream())                                    
await largeBlob.DownloadToAsync(ms);
      ms.Position = 0;
      ms.CopyTo(stream);
      stream.Position = 0;
     var image = Image.Load(stream, out IImageFormat format)
于 2020-06-09T17:17:42.563 回答
1

这将是因为 AWS 对文件上传做了一件奇怪的事情,您会发现 byte[] 实际上不是有效的图像文件(可通过保存原始字节数组来测试)。

另一个问题的这个答案应该可以帮助您重新配置 AWS 以允许您的代码工作。

https://stackoverflow.com/a/56695747/234855

于 2020-01-16T14:23:19.807 回答