下面是C#实现图片剪裁并保存的攻略,包含两个示例说明。
1.准备工作
在开始实现图片剪裁之前,需要先引用System.Drawing命名空间,该命名空间是提供处理图片的基本类。
在引用之前需要确保本地已安装.NET Framework SDK,如果未安装可在微软官网下载并安装。
如下所示:
using System.Drawing;
其次,需要了解图片剪裁需要的几个关键概念和类:
- Image类:代表一个图片,是所有具体图像类型的基类。
- Graphics类:代表一个绘图图面,提供了基本的绘制和变换方法。
- Bitmap类:是一个包含像素的图像。可以从指定的文件或资源中创建Bitmap类,也可以通过使用Graphics类绘制。
- Rectangle类:一个矩形结构,它由四个整数值构成,分别代表矩形的x坐标、y坐标、宽度和高度。
2.实现图片剪裁
以下是实现图片剪切的四个步骤:
- 根据指定的路径,创建一个Image对象。
Image sourceImage = Image.FromFile(@"C:\图片.jpg");
- 创建一个Bitmap对象并设置它的大小与剪切矩形的大小相同。
Bitmap targetImage = new Bitmap(cropWidth, cropHeight);
- 创建一个Graphics对象,并使用Graphics对象的DrawImage方法将想要剪裁的部分绘制在targetImage对象上。
Graphics graphics = Graphics.FromImage(targetImage);
graphics.DrawImage(sourceImage, new Rectangle(0, 0, cropWidth, cropHeight), cropX, cropY, cropWidth, cropHeight, GraphicsUnit.Pixel);
其中参数的意义分别为:
- new Rectangle(0, 0, cropWidth, cropHeight):图片被剪裁后的矩形范围,这里设置为目标图片的大小。
- cropX, cropY:指定需要剪切的矩形在源图片中的坐标。
- cropWidth, cropHeight:指定需要剪切的矩形的宽度和高度。
-
GraphicsUnit.Pixel:指定矩形中的单位为像素。
-
最后,将targetImage对象保存到本地文件中。
targetImage.Save(@"C:\剪裁后的图片.jpg");
3.示例1:剪裁图片中的人脸
下面是一个剪裁一张人脸图片的示例:
using System.Drawing;
using System.IO;
namespace ImageCropper
{
class Program
{
static void Main(string[] args)
{
//加载源图片
Image sourceImage = Image.FromFile(@"C:\face.jpg");
//创建一个位图对象
Bitmap targetImage = new Bitmap(200, 200);
//创建一个Graphics对象
Graphics graphics = Graphics.FromImage(targetImage);
//剪切源图片中的矩形区域,并绘制到targetImage上
graphics.DrawImage(sourceImage, new Rectangle(0, 0, 200, 200), new Rectangle(200, 200, 200, 200), GraphicsUnit.Pixel);
//将targetImage保存到本地文件中
targetImage.Save(@"C:\face_cropped.jpg");
//释放所有对象,避免内存泄漏
graphics.Dispose();
targetImage.Dispose();
sourceImage.Dispose();
}
}
}
上面的代码会将源图片中大小为200x200的矩形区域在新图片中剪裁保存,这个矩形区域是源图片中以(200, 200)为左上角顶点,大小为200x200的矩形。
4.示例2:剪裁多张图片并保存
下面是一个剪裁多张图片的示例:
using System.Drawing;
using System.IO;
namespace ImageCropper
{
class Program
{
static void Main(string[] args)
{
//要剪裁的图片列表
string[] imagePaths = new string[]
{
@"C:\flower1.jpg",
@"C:\flower2.jpg",
@"C:\flower3.jpg",
@"C:\flower4.jpg",
};
//剪裁后的图片保存目录
string directoryPath = @"C:\cropped_images\";
//循环剪裁每个图片
for (int i = 0; i < imagePaths.Length; i++)
{
//加载源图片
Image sourceImage = Image.FromFile(imagePaths[i]);
//创建一个位图对象
Bitmap targetImage = new Bitmap(200, 200);
//创建一个Graphics对象
Graphics graphics = Graphics.FromImage(targetImage);
//剪切源图片中的矩形区域,并绘制到targetImage上
graphics.DrawImage(sourceImage, new Rectangle(0, 0, 200, 200), new Rectangle(200, 200, 200, 200), GraphicsUnit.Pixel);
//将targetImage保存到本地文件中
string fileName = Path.GetFileNameWithoutExtension(imagePaths[i]);
targetImage.Save(Path.Combine(directoryPath, fileName + "_cropped.jpg"));
//释放所有对象,避免内存泄漏
graphics.Dispose();
targetImage.Dispose();
sourceImage.Dispose();
}
}
}
}
上面的代码会将4张花卉图片中大小为200x200的矩形区域在新图片中剪裁保存,剪裁后的图片会存储在一个指定的目录中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#如何实现图片的剪裁并保存 - Python技术站