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 });
}