ImageSharp旋转截去部分图像

ImageSharp rotation cuts off part of the image

我正在尝试使用 ImageSharp 旋转图像。

这是我的 .NET Core API 代码:

    public async Task<IActionResult> Rotate([FromBody] PhotoRotateViewModel model)
    {
        var photo = await _photoRepository.Get(model.PhotoId);

        if (photo != null)
        {
            byte[] imageBytes;
            HttpWebRequest imageRequest = (HttpWebRequest)WebRequest.Create(photo.imageUrl);
            WebResponse imageResponse = imageRequest.GetResponse();

            Stream responseStream = imageResponse.GetResponseStream();

            using (BinaryReader br = new BinaryReader(responseStream))
            {
                imageBytes = br.ReadBytes(500000);
                br.Close();
            }
            responseStream.Close();
            imageResponse.Close();

            var rotatedImage = RotateImage(imageBytes);


        }
        return Ok();
    }

    private byte[] RotateImage(byte[] imageInBytes)
    {
        using (var image = Image.Load(imageInBytes, out var imageFormat))
        {
            image.Mutate(x => x.Rotate(90));
            return ImageToByteArray(image, imageFormat);
        }
    }

    private byte[] ImageToByteArray(Image<Rgba32> image, IImageFormat imageFormat)
    {
        using (var ms = new MemoryStream())
        {
            image.Save(ms, imageFormat);
            return ms.ToArray();
        }
    }

新图片好像被截断了。

我附上了我的原始图片,以及我得到的结果

原文:

旋转:

这似乎发生在我尝试过的所有图像上

我看过 api 文档。 ImageSharp 的库或您的代码(旋转图像的部分)似乎都没有问题。但是我觉得有趣的是,当你读取字节时,你为要读取的字节设置了一个数字。不要像这样读取 imageBytes = br.ReadBytes(500000);,而是尝试读取字节直到流结束。为此,请尝试以下代码。

using (BinaryReader br = new BinaryReader(responseStream))
{
        imageBytes = br.ReadBytes(int.MaxValue);
        br.Close();
}

编辑:

处理内存溢出异常并借助this answer或简单设置br.ReadBytes(stream.Length);.

来读取文件