【问题标题】:ImageSharp rotation cuts off part of the imageImageSharp 旋转会切掉部分图像
【发布时间】:2019-12-28 05:40:24
【问题描述】:

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

新图像好像被截断了。

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

原文:

旋转:

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

【问题讨论】:

    标签: asp.net-core imagesharp


    【解决方案1】:

    我查看了 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);

    【讨论】:

    • 感谢您,您为我指明了正确的方向。我将 500,000 更改为 5,000,000 并且它起作用了。当我尝试 int.MaxValue 时,出现内存不足错误
    • 完全没问题。是的,这是可能的错误之一,您可以检查此答案以正确读取所有字节。 stackoverflow.com/questions/8613187/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 2017-01-04
    • 1970-01-01
    • 2011-11-17
    相关资源
    最近更新 更多