我需要在.NET Core中裁剪图像。我使用了ImageSharp,CoreCompat和Microsoft.Windows.Compatibility,并扫描了所有可以找到的方法。但是,我仍然找不到裁剪图像的方法。调整大小在那里,但没有裁剪。
如何根据左上角的像素位置,宽度和高度在.NET Core中裁剪图像?
答案 0 :(得分:1)
我建议使用ImageSharp或CoreCompat.System.Drawing 如果您使用的是ImageSharp,我认为这是裁剪图像的正确方法。通过Mutate()方法使用ImageProcessors:
int width = 0;
int height = 0;
image.Mutate(ctx => ctx.Crop(width, height));
您需要以下名称空间才能访问它:
using SixLabors.ImageSharp.Processing;
答案 1 :(得分:0)
您可以使用ImageSharp library。它具有基于左上角裁剪图像的方法。看下面的例子:
private async static Task CropImage()
{
using (var httpClient = new HttpClient())
{
var response = await httpClient.GetAsync("https://assets-cdn.github.com/images/modules/logos_page/GitHub-Mark.png")
.ConfigureAwait(false);
using (var inputStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false))
{
using (var image = Image.Load(inputStream))
{
var path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "foo.png");
image.Clone(
ctx => ctx.Crop(560, 300)).Save(path);
}
}
}
}
答案 2 :(得分:0)
只需安装以下软件包:
System.Drawing.Common package
并使用以下代码:
using SD = System.Drawing;
static byte[] Crop(string Img, int Width, int Height, int X, int Y)
{
try
{
using (SD.Image OriginalImage = SD.Image.FromFile(Img))
{
using (SD.Bitmap bmp = new SD.Bitmap(Width, Height))
{
bmp.SetResolution(OriginalImage.HorizontalResolution, OriginalImage.VerticalResolution);
using (SD.Graphics Graphic = SD.Graphics.FromImage(bmp))
{
Graphic.SmoothingMode = SmoothingMode.AntiAlias;
Graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
Graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
Graphic.DrawImage(OriginalImage, new SD.Rectangle(0, 0, Width, Height), X, Y, Width, Height, SD.GraphicsUnit.Pixel);
MemoryStream ms = new MemoryStream();
bmp.Save(ms, OriginalImage.RawFormat);
return ms.GetBuffer();
}
}
}
}
catch (Exception Ex)
{
throw (Ex);
}
}
此答案基于一篇不错的文章here。但是,只需安装上述软件包,即可进行修改以在.net Core 2.x及更高版本下工作。顺便说一下,其他著名的软件包都使用相同的核心库。
如您所见,与其他答案中提到的著名库相比,您在裁剪方面具有更大的灵活性。