c#使用ImageProcessor 对图片进行切片
标签:tor from param file i++ 路径 直接 数据 rect
在日常工作中经常会出现图片过大,导致不能打印的情况,在这里会介绍将一张大图切割为若干小图的方法。
首先操作图片使用的是ImageProcessor.dll。(下载方法,程序包管理控制台输入“Install-Package ImageProcessor”)
然后开始直接上代码
1 ///
2 /// 切片
3 ///
4 /// 图片路径
5 /// 切片宽
6 /// 切片高
7 public static void SliceUp(string imagePath, int silceUpWidth, int silceUpHeight)
8 {
9 Image orginalImage = Image.FromFile(imagePath);
10 //计算x方向上的切片份数,如果原图宽度100 ,切片宽度30,则切片在x方向上的份数为4
11 int widthCount = (int)Math.Ceiling((orginalImage.Width * 1.0) / (silceUpWidth * 1.0));
12 //计算y方向上的切片份数,如果原图宽度100 ,切片宽度30,则切片在x方向上的份数为4
13 int heightCount = (int)Math.Ceiling((orginalImage.Height * 1.0) / (silceUpHeight * 1.0));
14 for (int i = 0; i )
15 {
16 //设置最终切割的高度
17 int recHeight = 0;
18 //判断图片高度是否满足本次切片的高度
19 if (orginalImage.Height - silceUpHeight * i > silceUpHeight)
20 {
21 recHeight = silceUpHeight;
22 }
23 else
24 {
25 recHeight = orginalImage.Height - silceUpHeight * i;
26 }
27 for (int j = 0; j )
28 {
29 //设置最终切割的宽度
30 int recWidth = 0;
31 //判断图片高度是否满足本次切片的宽度
32 if (orginalImage.Width - silceUpWidth * i > silceUpWidth)
33 {
34 recWidth = silceUpWidth;
35 }
36 else
37 {
38 recWidth = orginalImage.Width - silceUpWidth * i;
39 }
40 //保留exif元数据,初始化ImageFactory
41 using (ImageFactory imageFactory = new ImageFactory(true))
42 {
43 //创建截取图片的大小
44 Rectangle rectangle = new Rectangle
45 (j * silceUpWidth
46 , i * silceUpHeight
47 , recWidth, recHeight
48 );
49 string savePath = "D:\\" + Guid.NewGuid().ToString() + ".jpg";
50 //切割图片
51 imageFactory.Load(orginalImage)
52 .Crop(rectangle)
53 .Save(savePath);
54 }
55 }
56 }
57 }
上面的代码为直接将图片保存到本地,也可以将切割后的图片保存为流,代码如下:
//也可以保存为输出流
using (MemoryStream outStream=new MemoryStream())
{
imageFactory.Load(orginalImage)
.Crop(rectangle)
.Save(outStream);
}
//对图片的流进行操作
//...
c#使用ImageProcessor 对图片进行切片
标签:tor from param file i++ 路径 直接 数据 rect
原文地址:http://www.cnblogs.com/Yuuuuu/p/7771529.html
评论