0

我正在尝试使用 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();
        }
    }

看起来新图像被切断了。

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

原来的:

在此处输入图像描述

旋转:

在此处输入图像描述

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

4

1 回答 1

3

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

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

编辑:

处理内存不足异常并在此答案的帮助下读取文件或简单地设置br.ReadBytes(stream.Length);.

于 2019-01-02T06:12:11.983 回答