网上搜集的一个比较实用的图片操作类

namespace System.Images.ImagesHelper
002{
003    /**//// <summary>
004    ///ImgOperate 的摘要说明
005    /// </summary>
006    public class ImagesHelper
007    {
008        图片处理类构造方法#region 图片处理类构造方法
009        /**//// <summary>
010        /// 图片处理类构造方法
011        /// </summary>
012        public ImagesHelper()
013        {
014            //
015            //TODO: 在此处添加构造函数逻辑
016            //
017        }
018        #endregion
019        用于缩小图片#region 用于缩小图片
020        //************************************************************//
021        //下面给出三个简单的方法,后面两个方法是扩展
022        //************************************************************//
023        /**//// <summary>
024        ///用于缩小图片
025        /// </summary>
026        /// <param name="strOldPic">原始图片路径</param>
027        /// <param name="strNewPic">新图片路径</param>
028        /// <param name="intWidth">新图片宽度</param>
029        /// <param name="intHeight">新图片高度</param>
030        /// <param name="isDeleteOldPic">是否删除原始图片</param>
031        public void ReducePic(string strOldPic, string strNewPic, int intWidth, int intHeight, bool isDeleteOldPic)
032        {
033            System.Drawing.Bitmap objPic, objNewPic;
034            try
035            {
036                objPic = new System.Drawing.Bitmap(strOldPic);
037                objNewPic = new System.Drawing.Bitmap(objPic, intWidth, intHeight);
038                objNewPic.Save(strNewPic);
039                objPic.Dispose();
040                objNewPic.Dispose();
041                if (isDeleteOldPic)
042                {
043                    if (File.Exists(strOldPic))
044                    {
045                        File.Delete(strOldPic);
046                    }
047                }
048  
049            }
050            catch (Exception exp) { throw exp; }
051            finally
052            {
053                objPic = null;
054                objNewPic = null;
055            }
056        }
057        /**//// <summary>
058        /// 将图片缩放至指定类型指定值
059        /// </summary>
060        /// <param name="strOldPic">原始图片路径</param>
061        /// <param name="strNewPic">新图片路径</param>
062        /// <param name="intValue">指定值</param>
063        /// <param name="type">缩放类型(W/w为指定宽度,H/h为指定高度)</param>
064        /// <param name="isDeleteOldPic">是否删除原始图片</param>
065        public  void ReducePic(string strOldPic, string strNewPic, int intValue, string type, bool isDeleteOldPic)
066        {
067            System.Drawing.Bitmap objPic, objNewPic;
068            int intWidth = 0;
069            int intHeight = 0;
070            try
071            {
072                objPic = new System.Drawing.Bitmap(strOldPic);
073                if (type == "W" || type == "w")
074                {
075                    intWidth = intValue;
076                    intHeight = Convert.ToInt32(((intWidth * 1.0) / (objPic.Width * 1.0)) * objPic.Height);
077                }
078                else if (type == "H" || type == "h")
079                {
080                    intHeight = intValue;
081                    intWidth = Convert.ToInt32(((intHeight * 1.0) / (objPic.Height * 1.0)) * objPic.Width);
082                }
083                else
084                {
085                    throw new Exception("未指定图片缩放类型");
086                }
087                objNewPic = new System.Drawing.Bitmap(objPic, intWidth, intHeight);
088                objNewPic.Save(strNewPic);
089                objPic.Dispose();
090                objNewPic.Dispose();
091                if (isDeleteOldPic)
092                {
093                    if (File.Exists(strOldPic))
094                    {
095                        File.Delete(strOldPic);
096                    }
097                }
098  
099            }
100            catch (Exception exp) { throw exp; }
101            finally
102            {
103                objPic = null;
104                objNewPic = null;
105            }
106        }
107        /**//// <summary>
108        /// 用于缩放图片
109        /// </summary>
110        /// <param name="strOldPic">原始图片路径</param>
111        /// <param name="strNewPic">新图片路径</param>
112        /// <param name="balance">缩放比例</param>
113        /// <param name="isDeleteOldPic">是否删除原始图片</param>
114        public  void ReducePic(string strOldPic, string strNewPic, double balance, bool isDeleteOldPic)
115        {
116            System.Drawing.Bitmap objPic, objNewPic;
117            try
118            {
119                objPic = new System.Drawing.Bitmap(strOldPic);
120                int intWidth = Convert.ToInt32((objPic.Width) * balance);
121                int intHeight = Convert.ToInt32((objPic.Height) * balance);
122                objNewPic = new System.Drawing.Bitmap(objPic, intWidth, intHeight);
123                objNewPic.Save(strNewPic);
124                objPic.Dispose();
125                objNewPic.Dispose();
126                if (isDeleteOldPic)
127                {
128                    if (File.Exists(strOldPic))
129                    {
130                        File.Delete(strOldPic);
131                    }
132                }
133  
134            }
135            catch (Exception exp) { throw exp; }
136            finally
137            {
138                objPic = null;
139                objNewPic = null;
140            }
141        }
142        /**//// <summary>
143        /// 获取图片指定部分
144        /// </summary>
145        /// <param name="pPath">图片路径</param>
146        /// <param name="pSavePath">保存路径</param>
147        /// <param name="pPartStartPointX">目标图片开始绘制处的坐标X值(通常为)</param>
148        /// <param name="pPartStartPointY">目标图片开始绘制处的坐标Y值(通常为)</param>
149        /// <param name="pPartWidth">目标图片的宽度</param>
150        /// <param name="pPartHeight">目标图片的高度</param>
151        /// <param name="pOrigStartPointX">原始图片开始截取处的坐标X值</param>
152        /// <param name="pOrigStartPointY">原始图片开始截取处的坐标Y值</param>
153        public void ReducePic(string pPath, string pSavedPath, int pPartStartPointX, int pPartStartPointY, int pPartWidth, int pPartHeight, int pOrigStartPointX, int pOrigStartPointY)
154        {
155            System.Drawing.Image originalImg = System.Drawing.Image.FromFile(pPath);
156            Bitmap partImg = new Bitmap(pPartWidth, pPartHeight);
157            Graphics graphics = Graphics.FromImage(partImg);
158            Rectangle destRect = new Rectangle(new Point(pPartStartPointX, pPartStartPointY), new Size(pPartWidth, pPartHeight));//目标位置
159            Rectangle origRect = new Rectangle(new Point(pOrigStartPointX, pOrigStartPointY), new Size(pPartWidth, pPartHeight));//原图位置(默认从原图中截取的图片大小等于目标图片的大小)
160            graphics.DrawImage(originalImg, destRect, origRect, GraphicsUnit.Pixel);
161            partImg.Save(pSavedPath, ImageFormat.Jpeg);
162        }
163        #endregion
164        添加水印文字#region 添加水印文字
165        /**//// <summary>
166        /// 为上传的图片添加水印文字
167        /// </summary>
168        /// <param name="Path">原始图片路径</param>
169        /// <param name="Path_sy">水印图片路径</param>
170        /// <param name="WaterText">水印文字</param>
171        public  void AddWaterText(string Path, string Path_sy, string WaterText)
172        {
173            string addText = WaterText;
174            System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
175            System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
176            g.DrawImage(image, 0, 0, image.Width, image.Height);
177            System.Drawing.Font f = new System.Drawing.Font("Verdana", 10);
178            System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.LightSlateGray);
179            g.DrawString(addText, f, b, image.Width - 100, image.Height - 20);
180            g.Dispose();
181            image.Save(Path_sy);
182            image.Dispose();
183        }
184        #endregion
185        为图片增加水印图片#region 为图片增加水印图片
186        /**//// <summary>
187        /// 在图片上生成图片水印
188        /// </summary>
189        /// <param name="Path">原服务器图片路径</param>
190        /// <param name="Path_syp">生成的带图片水印的图片路径</param>
191        /// <param name="Path_sypf">水印图片路径</param>
192        public  void AddWaterPic(string Path, string Path_syp, string Path_sypf)
193        {
194            System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
195            System.Drawing.Image copyImage = System.Drawing.Image.FromFile(Path_sypf);
196            System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
197            g.DrawImage(copyImage, new System.Drawing.Rectangle(image.Width - copyImage.Width, image.Height - copyImage.Height, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, System.Drawing.GraphicsUnit.Pixel);
198            g.Dispose();
199            image.Save(Path_syp);
200            image.Dispose();
201        }
202        #endregion
203        获取图片的高度和宽度#region 获取图片的高度和宽度
204        /**//// <summary>
205        /// 获取图片的高度和宽度
206        /// </summary>
207        /// <param name="imgurl">img图片的地址</param>
208        /// <returns></returns>
209        public int[] GetImgWidth(string imgurl)
210        {
211            System.Drawing.Image image;
212            image = System.Drawing.Image.FromFile(imgurl);
213            int imgwidth = image.Width;
214            int imgHeight = image.Height;
215            int[] img = { imgwidth, imgHeight };
216            return img;
217        }
218        #endregion
219        压缩图片#region 压缩图片
220        /**//// <summary>
221        /// 对图片进行压缩
222        /// </summary>
223        /// <param name="filePath">原始图片路径</param>
224        /// <param name="filePath_ystp">压缩后的图片路径</param>
225        public void DensityPic(string filePath, string filePath_ystp) //压缩图片 
226        {
227            Bitmap bmp = new Bitmap(filePath);
228            //ImageCoderInfo 
229            ImageCodecInfo ici = null;
230            //Encoder 
231            System.Drawing.Imaging.Encoder ecd = null;
232            //EncoderParameter 
233            EncoderParameter ept = null;
234            //EncoderParameters 
235            EncoderParameters eptS = null;
236            try
237            {
238                ici = this.getImageCoderInfo("image/jpeg");
239                ecd = System.Drawing.Imaging.Encoder.Quality;
240                eptS = new EncoderParameters(1);
241                ept = new EncoderParameter(ecd, 10L);
242                eptS.Param[0] = ept;
243                bmp.Save(filePath_ystp, ici, eptS);
244            
245  
246  
247            catch (Exception ex)
248            {
249                throw new Exception(ex.Message);
250            }
251            finally
252            {
253                bmp.Dispose();
254                ept.Dispose();
255                eptS.Dispose();
256            }
257        }
258        private ImageCodecInfo getImageCoderInfo(string coderType)// 获取图片编码类型信息 
259        {
260            ImageCodecInfo[] iciS = ImageCodecInfo.GetImageEncoders();
261            ImageCodecInfo retIci = null;
262            foreach (ImageCodecInfo ici in iciS)
263            {
264                if (ici.MimeType.Equals(coderType))
265                    retIci = ici;
266            }
267  
268            return retIci;
269        }
270        #endregion
271        获取图片的指定部分#region 获取图片的指定部分
272        /**//**/
273        /**//// <summary>
274        /// 获取图片指定部分
275        /// </summary>
276        /// <param name="pPath">图片路径</param>
277        /// <param name="pSavePath">保存路径</param>
278        /// <param name="pPartStartPointX">目标图片开始绘制处的坐标X值(通常为)</param>
279        /// <param name="pPartStartPointY">目标图片开始绘制处的坐标Y值(通常为)</param>
280        /// <param name="pPartWidth">目标图片的宽度</param>
281        /// <param name="pPartHeight">目标图片的高度</param>
282        /// <param name="pOrigStartPointX">原始图片开始截取处的坐标X值</param>
283        /// <param name="pOrigStartPointY">原始图片开始截取处的坐标Y值</param>
284        /// <param name="pFormat">保存格式,通常可以是jpeg</param>
285        public void GetPart(string pPath, string pSavedPath, int pPartStartPointX, int pPartStartPointY, int pPartWidth, int pPartHeight, int pOrigStartPointX, int pOrigStartPointY)
286        {
287            string normalJpgPath = pSavedPath;
288  
289            using (System.Drawing.Image originalImg = System.Drawing.Image.FromFile(pPath))
290            {
291                Bitmap partImg = new Bitmap(pPartWidth, pPartHeight);
292                Graphics graphics = Graphics.FromImage(partImg);
293                Rectangle destRect = new Rectangle(new Point(pPartStartPointX, pPartStartPointY), new Size(pPartWidth, pPartHeight));//目标位置
294                Rectangle origRect = new Rectangle(new Point(pOrigStartPointX, pOrigStartPointY), new Size(pPartWidth, pPartHeight));//原图位置(默认从原图中截取的图片大小等于目标图片的大小)
295  
296  
297                /**////文字水印  
298                System.Drawing.Graphics G = System.Drawing.Graphics.FromImage(partImg);
299                System.Drawing.Font f = new Font("Lucida Grande", 6);
300                System.Drawing.Brush b = new SolidBrush(Color.Gray);
301                G.Clear(Color.White);
302                graphics.DrawImage(originalImg, destRect, origRect, GraphicsUnit.Pixel);
303                G.DrawString("TianTang.Com", f, b, 0, 0);
304                G.Dispose();
305  
306                originalImg.Dispose();
307                if (File.Exists(normalJpgPath))
308                {
309                    File.SetAttributes(normalJpgPath, FileAttributes.Normal);
310                    File.Delete(normalJpgPath);
311                }
312                partImg.Save(normalJpgPath, ImageFormat.Jpeg);
313            }
314        }
315        #endregion
316        获取图片的指定部分#region 获取图片的指定部分
317        /**//**/
318        /**//// <summary>
319        /// 获取按比例缩放的图片指定部分
320        /// </summary>
321        /// <param name="pPath">图片路径</param>
322        /// <param name="pSavePath">保存路径</param>
323        /// <param name="pPartStartPointX">目标图片开始绘制处的坐标X值(通常为)</param>
324        /// <param name="pPartStartPointY">目标图片开始绘制处的坐标Y值(通常为)</param>
325        /// <param name="pPartWidth">目标图片的宽度</param>
326        /// <param name="pPartHeight">目标图片的高度</param>
327        /// <param name="pOrigStartPointX">原始图片开始截取处的坐标X值</param>
328        /// <param name="pOrigStartPointY">原始图片开始截取处的坐标Y值</param>
329        /// <param name="imageWidth">缩放后的宽度</param>
330        /// <param name="imageHeight">缩放后的高度</param>
331        public void GetPart(string pPath, string pSavedPath, int pPartStartPointX, int pPartStartPointY, int pPartWidth, int pPartHeight, int pOrigStartPointX, int pOrigStartPointY, int imageWidth, int imageHeight)
332        {
333            string normalJpgPath = pSavedPath;
334            using (System.Drawing.Image originalImg = System.Drawing.Image.FromFile(pPath))
335            {
336                if (originalImg.Width == imageWidth && originalImg.Height == imageHeight)
337                {
338                    GetPart(pPath, pSavedPath, pPartStartPointX, pPartStartPointY, pPartWidth, pPartHeight, pOrigStartPointX, pOrigStartPointY);
339                    return;
340                }
341  
342                System.Drawing.Image.GetThumbnailImageAbort callback = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
343                System.Drawing.Image zoomImg = originalImg.GetThumbnailImage(imageWidth, imageHeight, callback, IntPtr.Zero);//缩放
344                Bitmap partImg = new Bitmap(pPartWidth, pPartHeight);
345  
346                Graphics graphics = Graphics.FromImage(partImg);
347                Rectangle destRect = new Rectangle(new Point(pPartStartPointX, pPartStartPointY), new Size(pPartWidth, pPartHeight));//目标位置
348                Rectangle origRect = new Rectangle(new Point(pOrigStartPointX, pOrigStartPointY), new Size(pPartWidth, pPartHeight));//原图位置(默认从原图中截取的图片大小等于目标图片的大小)
349  
350                /**////文字水印  
351                System.Drawing.Graphics G = System.Drawing.Graphics.FromImage(partImg);
352                System.Drawing.Font f = new Font("Lucida Grande", 6);
353                System.Drawing.Brush b = new SolidBrush(Color.Gray);
354                G.Clear(Color.White);
355  
356                graphics.DrawImage(zoomImg, destRect, origRect, GraphicsUnit.Pixel);
357                G.DrawString("TianTang.Com", f, b, 0, 0);
358                G.Dispose();
359  
360                originalImg.Dispose();
361                if (File.Exists(normalJpgPath))
362                {
363                    File.SetAttributes(normalJpgPath, FileAttributes.Normal);
364                    File.Delete(normalJpgPath);
365                }
366                partImg.Save(normalJpgPath, ImageFormat.Jpeg);
367            }
368        }
369        public bool ThumbnailCallback()
370        {
371            return false;
372        }
373        #endregion
374    }
375
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值