c#使用ImageProcessor 對圖片進行切片


在日常工作中經常會出現圖片過大,導致不能打印的情況,在這里會介紹將一張大圖切割為若干小圖的方法。

  首先操作圖片使用的是ImageProcessor.dll。(下載方法,程序包管理控制台輸入“Install-Package ImageProcessor”)

  然后開始直接上代碼

 1      /// <summary>
 2         /// 切片
 3         /// </summary>
 4         /// <param name="imagePath">圖片路徑</param>
 5         /// <param name="silceUpWidth">切片寬</param>
 6         /// <param name="silceUpHeight">切片高</param>
 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 < heightCount; 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 < widthCount; 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);
                        }
                        //對圖片的流進行操作
                        //...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM