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);
.
来读取文件
我正在尝试使用 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);
.