GDI+中对图片的裁剪
CutImage
1void CutImage(HttpPostedFile post,string ppuid,out string imagename)
2 {
3 System.Drawing.Image SourceImg = System.Drawing.Image.FromStream(post.InputStream);
4 if (SourceImg.Height > ConfigHelper.UserFaceMaxHeight)
5 {
6 this._lbl_upload_msg.Text = "最大高度不得大于 " + ConfigHelper.UserFaceMaxHeight;
7 return;
8 }
9 if (SourceImg.Width > ConfigHelper.UserFaceMaxWidth)
10 {
11 this._lbl_upload_msg.Text = "最大宽度不得大于 " + ConfigHelper.UserFaceMaxWidth;
12 return;
13 }
14 ImageFormat format = getImageformat(System.IO.Path.GetExtension(post.FileName));
15 string filename = ppuid+"."+format.ToString();
16 imagename = filename;
17
18 if (!UserFaceDir.EndsWith("\\"))
19 UserFaceDir = UserFaceDir+"\\";
20 filename = UserFaceDir + filename;
21 int SourceImgWidth = SourceImg.Width;
22 int SourceImgHeight = SourceImg.Height;
23 if ((SourceImgWidth != ConfigHelper.UserFaceWidth) && (SourceImgHeight != ConfigHelper.UserFaceHeight))
24 {
25 //如果宽高比例为1:1,则直接构成缩略图
26 if (((Double)SourceImgWidth / SourceImgHeight) == 1)
27 {
28 System.Drawing.Image thumbimg = SourceImg.GetThumbnailImage(ConfigHelper.UserFaceWidth, ConfigHelper.UserFaceHeight, null, IntPtr.Zero);
29 thumbimg.Save(filename, format);
30 thumbimg.Dispose();
31 SourceImg.Dispose();
32 return;
33 }
34 Bitmap bit = new Bitmap(SourceImg);
35 Rectangle rec = new Rectangle(); //构造一个Rectangle类,一个矩形
36 rec.Width = ConfigHelper.UserFaceWidth;
37 rec.Height = ConfigHelper.UserFaceHeight;
38 if (SourceImgWidth > rec.Width)
39 rec.X = (SourceImgWidth - rec.Width) / 2;
40 else
41 {
42 rec.X = 0;
43 rec.Width = SourceImg.Width;
44 }
45 if (SourceImgHeight > rec.Height)
46 rec.Y = (SourceImgHeight - rec.Height) / 2;
47 else
48 {
49 rec.Y = 0;
50 rec.Height = SourceImg.Height;
51 }
52
53 try
54 {
55 //这里就是把从上传过程中构造的bitmap克隆一份,并按定义好的矩形裁剪
56 bit.Clone(rec, PixelFormat.DontCare).Save(filename, format);
57 }
58 catch (Exception ex)
59 {
60 this._lbl_upload_msg.Text = ex.Message;
61 return;
62 }
63 finally
64 {
65 bit.Dispose();
66 SourceImg.Dispose();
67 }
68 }
69 }
70
1void CutImage(HttpPostedFile post,string ppuid,out string imagename)
2 {
3 System.Drawing.Image SourceImg = System.Drawing.Image.FromStream(post.InputStream);
4 if (SourceImg.Height > ConfigHelper.UserFaceMaxHeight)
5 {
6 this._lbl_upload_msg.Text = "最大高度不得大于 " + ConfigHelper.UserFaceMaxHeight;
7 return;
8 }
9 if (SourceImg.Width > ConfigHelper.UserFaceMaxWidth)
10 {
11 this._lbl_upload_msg.Text = "最大宽度不得大于 " + ConfigHelper.UserFaceMaxWidth;
12 return;
13 }
14 ImageFormat format = getImageformat(System.IO.Path.GetExtension(post.FileName));
15 string filename = ppuid+"."+format.ToString();
16 imagename = filename;
17
18 if (!UserFaceDir.EndsWith("\\"))
19 UserFaceDir = UserFaceDir+"\\";
20 filename = UserFaceDir + filename;
21 int SourceImgWidth = SourceImg.Width;
22 int SourceImgHeight = SourceImg.Height;
23 if ((SourceImgWidth != ConfigHelper.UserFaceWidth) && (SourceImgHeight != ConfigHelper.UserFaceHeight))
24 {
25 //如果宽高比例为1:1,则直接构成缩略图
26 if (((Double)SourceImgWidth / SourceImgHeight) == 1)
27 {
28 System.Drawing.Image thumbimg = SourceImg.GetThumbnailImage(ConfigHelper.UserFaceWidth, ConfigHelper.UserFaceHeight, null, IntPtr.Zero);
29 thumbimg.Save(filename, format);
30 thumbimg.Dispose();
31 SourceImg.Dispose();
32 return;
33 }
34 Bitmap bit = new Bitmap(SourceImg);
35 Rectangle rec = new Rectangle(); //构造一个Rectangle类,一个矩形
36 rec.Width = ConfigHelper.UserFaceWidth;
37 rec.Height = ConfigHelper.UserFaceHeight;
38 if (SourceImgWidth > rec.Width)
39 rec.X = (SourceImgWidth - rec.Width) / 2;
40 else
41 {
42 rec.X = 0;
43 rec.Width = SourceImg.Width;
44 }
45 if (SourceImgHeight > rec.Height)
46 rec.Y = (SourceImgHeight - rec.Height) / 2;
47 else
48 {
49 rec.Y = 0;
50 rec.Height = SourceImg.Height;
51 }
52
53 try
54 {
55 //这里就是把从上传过程中构造的bitmap克隆一份,并按定义好的矩形裁剪
56 bit.Clone(rec, PixelFormat.DontCare).Save(filename, format);
57 }
58 catch (Exception ex)
59 {
60 this._lbl_upload_msg.Text = ex.Message;
61 return;
62 }
63 finally
64 {
65 bit.Dispose();
66 SourceImg.Dispose();
67 }
68 }
69 }
70