SixLabors ImageSharp crop-resize 错误的宽度和高度
SixLabors ImageSharp crop-resizes wrong width and height
我使用 SixLabors.ImageSharp 使用以下代码调整照片大小:
https://www.nuget.org/packages/SixLabors.ImageSharp/
ASP.NET 核心 5.0
输入照片:720x960px
预期输出:248x186px
实际结果:186x248px
为什么宽度变成高度,反之亦然?
using (var stream = new MemoryStream())
{
using var image = Image.Load(bytes);
image.Mutate(x => x
.Resize(new ResizeOptions
{
Mode = ResizeMode.Crop,
Position = AnchorPositionMode.Center,
Size = new Size(248, 186)
})
.BackgroundColor(Color.White));
await image.SaveAsync(stream, new JpegEncoder() { Quality = 85 });
}
这是因为您的源照片有一个元数据标志,该标志设置了自定义方向,这会导致客户端在渲染时旋转图像 it/interpreting,但实际上像素数据实际上比看起来旋转了 90 度.
您需要使用 .AutoOrient()
api 来为您解决这个问题,这会强制像素数据正确定向到所需的方向。
using (var stream = new MemoryStream())
{
using var image = Image.Load(bytes);
image.Mutate(x => x
.AutoOrient() // this is the important thing that needed adding
.Resize(new ResizeOptions
{
Mode = ResizeMode.Crop,
Position = AnchorPositionMode.Center,
Size = new Size(248, 186)
})
.BackgroundColor(Color.White));
await image.SaveAsync(stream, new JpegEncoder() { Quality = 85 });
}
我使用 SixLabors.ImageSharp 使用以下代码调整照片大小:
https://www.nuget.org/packages/SixLabors.ImageSharp/
ASP.NET 核心 5.0
输入照片:720x960px
预期输出:248x186px
实际结果:186x248px
为什么宽度变成高度,反之亦然?
using (var stream = new MemoryStream())
{
using var image = Image.Load(bytes);
image.Mutate(x => x
.Resize(new ResizeOptions
{
Mode = ResizeMode.Crop,
Position = AnchorPositionMode.Center,
Size = new Size(248, 186)
})
.BackgroundColor(Color.White));
await image.SaveAsync(stream, new JpegEncoder() { Quality = 85 });
}
这是因为您的源照片有一个元数据标志,该标志设置了自定义方向,这会导致客户端在渲染时旋转图像 it/interpreting,但实际上像素数据实际上比看起来旋转了 90 度.
您需要使用 .AutoOrient()
api 来为您解决这个问题,这会强制像素数据正确定向到所需的方向。
using (var stream = new MemoryStream())
{
using var image = Image.Load(bytes);
image.Mutate(x => x
.AutoOrient() // this is the important thing that needed adding
.Resize(new ResizeOptions
{
Mode = ResizeMode.Crop,
Position = AnchorPositionMode.Center,
Size = new Size(248, 186)
})
.BackgroundColor(Color.White));
await image.SaveAsync(stream, new JpegEncoder() { Quality = 85 });
}