Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 图像快速旋转会切断图像的一部分_Asp.net Core_Imagesharp - Fatal编程技术网

Asp.net core 图像快速旋转会切断图像的一部分

Asp.net core 图像快速旋转会切断图像的一部分,asp.net-core,imagesharp,Asp.net Core,Imagesharp,我正在尝试使用ImageSharp旋转图像 这是我的.NET核心API代码: public async Task<IActionResult> Rotate([FromBody] PhotoRotateViewModel model) { var photo = await _photoRepository.Get(model.PhotoId); if (photo != null) { byt

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

这是我的.NET核心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();
        }
    }
公共异步任务旋转([FromBody]PhotoRotateView模型)
{
var photo=wait_photopository.Get(model.PhotoId);
如果(照片!=null)
{
字节[]图像字节;
HttpWebRequest imageRequest=(HttpWebRequest)WebRequest.Create(photo.imageUrl);
WebResponse imageResponse=imageRequest.GetResponse();
Stream responseStream=imageResponse.GetResponseStream();
使用(BinaryReader br=新的BinaryReader(responseStream))
{
imageBytes=br.ReadBytes(500000);
br.Close();
}
responseStream.Close();
imageResponse.Close();
var RotateImage=RotateImage(图像字节);
}
返回Ok();
}
专用字节[]旋转图像(字节[]图像字节)
{
使用(var image=image.Load(imageInBytes,out var imageFormat))
{
变异(x=>x.Rotate(90));
返回ImageToByteArray(图像,imageFormat);
}
}
专用字节[]ImageToByteArray(图像图像,IImageFormat图像格式)
{
使用(var ms=new MemoryStream())
{
image.Save(ms,imageFormat);
返回ToArray女士();
}
}
看起来新图像被切断了

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

原件:

轮换:


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

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

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


处理内存不足异常,并借助或简单地设置
br.ReadBytes(stream.Length)读取文件

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

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


处理内存不足异常,并借助或简单地设置
br.ReadBytes(stream.Length)读取文件

谢谢你,你给我指明了正确的方向。我把50万换成了500万,结果成功了。当我尝试int.MaxValue时,我得到了一个内存不足的错误,一点问题也没有。是的,这是一个可能的错误,你可以检查这个答案来正确读取所有字节。谢谢你,你为我指明了正确的方向。我把50万换成了500万,结果成功了。当我尝试int.MaxValue时,我得到了一个内存不足的错误,一点问题也没有。是的,这是一个可能的错误,你可以检查这个答案来正确读取所有字节。