在 C# 中使用 SixLabors.ImageSharp 裁剪和移动图片
Cropping and moving pictures with SixLabors.ImageSharp in C#
我正在使用 SixLabors.ImageSharp 在 C# .NET Core 3.1 中以编程方式裁剪图像。您可以在下面找到一个有效的代码片段。
public static void ResizeImage(Image<Rgba32> input, Size dimensions)
{
var options = new ResizeOptions
{
Size = dimensions,
Mode = ResizeMode.Crop
};
input.Mutate(x => x.Resize(options));
}
效果很好,但我想允许用户根据一对给定坐标裁剪图像。这意味着,裁剪将从这些坐标开始,而不是从原点 (0, 0) 开始。可以用这个工具来做吗?
到目前为止,我只能从图像角开始裁剪。我希望能够从任何位置开始裁剪。例如,对于下图:
用户想要通过在 x 和 y 轴上移动裁剪来裁剪图片的中心部分。最终结果将是:
请注意,在给定的示例中,我已经切掉了图像的边角。可以用 Imagesharp 这样做吗?
使用Rectangle.FromLTRB
using (var inputStream = File.OpenRead(Path.Combine(inPath, "john-doe.png")))
using (var image = Image.Load<Rgba32>(inputStream))
{
// Generate some rough coordinates from the source.
// We'll take 25% off each edge.
var size = image.Size();
var l = size.Width / 4;
var t = size.Height / 4;
var r = 3 * (size.Width / 4);
var b = 3 * (size.Height / 4);
image.Mutate(x => x.Crop(Rectangle.FromLTRB(l, t, r, b)));
image.Save(Path.Combine(outPath, "john-doe-cropped.png"));
}
即使 pointed me in the right direction, and also before in our brief conversation in the Imagesharp's gitter discussion,为我解决问题的是以下代码:
private static void ResizeImage(Image<Rgba32> input, int width, int height, int x, int y)
{
input.Mutate(img => img.Crop(Rectangle.FromLTRB(x, y, width+x, height+y)));
}
在此代码中,我在 x
和 y
轴上移动原始图像,并按给定的 width
和 height
裁剪图像。
我正在使用 SixLabors.ImageSharp 在 C# .NET Core 3.1 中以编程方式裁剪图像。您可以在下面找到一个有效的代码片段。
public static void ResizeImage(Image<Rgba32> input, Size dimensions)
{
var options = new ResizeOptions
{
Size = dimensions,
Mode = ResizeMode.Crop
};
input.Mutate(x => x.Resize(options));
}
效果很好,但我想允许用户根据一对给定坐标裁剪图像。这意味着,裁剪将从这些坐标开始,而不是从原点 (0, 0) 开始。可以用这个工具来做吗?
到目前为止,我只能从图像角开始裁剪。我希望能够从任何位置开始裁剪。例如,对于下图:
用户想要通过在 x 和 y 轴上移动裁剪来裁剪图片的中心部分。最终结果将是:
请注意,在给定的示例中,我已经切掉了图像的边角。可以用 Imagesharp 这样做吗?
使用Rectangle.FromLTRB
using (var inputStream = File.OpenRead(Path.Combine(inPath, "john-doe.png")))
using (var image = Image.Load<Rgba32>(inputStream))
{
// Generate some rough coordinates from the source.
// We'll take 25% off each edge.
var size = image.Size();
var l = size.Width / 4;
var t = size.Height / 4;
var r = 3 * (size.Width / 4);
var b = 3 * (size.Height / 4);
image.Mutate(x => x.Crop(Rectangle.FromLTRB(l, t, r, b)));
image.Save(Path.Combine(outPath, "john-doe-cropped.png"));
}
即使
private static void ResizeImage(Image<Rgba32> input, int width, int height, int x, int y)
{
input.Mutate(img => img.Crop(Rectangle.FromLTRB(x, y, width+x, height+y)));
}
在此代码中,我在 x
和 y
轴上移动原始图像,并按给定的 width
和 height
裁剪图像。