无法在 C# 中使用 SixLabors.ImageSharp 处理 .jpg 图像 - 版本 1.0.0-beta0007

Jay*_*hra 8 c# image aws-lambda asp.net-core imagesharp

我无法在 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);
    }
Run Code Online (Sandbox Code Playgroud)

小智 10

确保流位置为零或尝试将流复制到新流,然后将位置设置为零,因为有时 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)
Run Code Online (Sandbox Code Playgroud)


toc*_*oft 1

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

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

/sf/answers/3968702321/