网上搜集的一个比较实用的图片操作类
namespace System.Images.ImagesHelper { /**//// <summary> ///ImgOperate 的摘要说明 /// </summary> public class ImagesHelper { 图片处理类构造方法#region 图片处理类构造方法 /**//// <summary> /// 图片处理类构造方法 /// </summary> public ImagesHelper() { // //TODO: 在此处添加构造函数逻辑 // } #endregion 用于缩小图片#region 用于缩小图片 //************************************************************// //下面给出三个简单的方法,后面两个方法是扩展 //************************************************************// /**//// <summary> ///用于缩小图片 /// </summary> /// <param name="strOldPic">原始图片路径</param> /// <param name="strNewPic">新图片路径</param> /// <param name="intWidth">新图片宽度</param> /// <param name="intHeight">新图片高度</param> /// <param name="isDeleteOldPic">是否删除原始图片</param> public void ReducePic(string strOldPic, string strNewPic, int intWidth, int intHeight, bool isDeleteOldPic) { System.Drawing.Bitmap objPic, objNewPic; try { objPic = new System.Drawing.Bitmap(strOldPic); objNewPic = new System.Drawing.Bitmap(objPic, intWidth, intHeight); objNewPic.Save(strNewPic); objPic.Dispose(); objNewPic.Dispose(); if (isDeleteOldPic) { if (File.Exists(strOldPic)) { File.Delete(strOldPic); } } } catch (Exception exp) { throw exp; } finally { objPic = null; objNewPic = null; } } /**//// <summary> /// 将图片缩放至指定类型指定值 /// </summary> /// <param name="strOldPic">原始图片路径</param> /// <param name="strNewPic">新图片路径</param> /// <param name="intValue">指定值</param> /// <param name="type">缩放类型(W/w为指定宽度,H/h为指定高度)</param> /// <param name="isDeleteOldPic">是否删除原始图片</param> public void ReducePic(string strOldPic, string strNewPic, int intValue, string type, bool isDeleteOldPic) { System.Drawing.Bitmap objPic, objNewPic; int intWidth = 0; int intHeight = 0; try { objPic = new System.Drawing.Bitmap(strOldPic); if (type == "W" || type == "w") { intWidth = intValue; intHeight = Convert.ToInt32(((intWidth * 1.0) / (objPic.Width * 1.0)) * objPic.Height); } else if (type == "H" || type == "h") { intHeight = intValue; intWidth = Convert.ToInt32(((intHeight * 1.0) / (objPic.Height * 1.0)) * objPic.Width); } else { throw new Exception("未指定图片缩放类型"); } objNewPic = new System.Drawing.Bitmap(objPic, intWidth, intHeight); objNewPic.Save(strNewPic); objPic.Dispose(); objNewPic.Dispose(); if (isDeleteOldPic) { if (File.Exists(strOldPic)) { File.Delete(strOldPic); } } } catch (Exception exp) { throw exp; } finally { objPic = null; objNewPic = null; } } /**//// <summary> /// 用于缩放图片 /// </summary> /// <param name="strOldPic">原始图片路径</param> /// <param name="strNewPic">新图片路径</param> /// <param name="balance">缩放比例</param> /// <param name="isDeleteOldPic">是否删除原始图片</param> public void ReducePic(string strOldPic, string strNewPic, double balance, bool isDeleteOldPic) { System.Drawing.Bitmap objPic, objNewPic; try { objPic = new System.Drawing.Bitmap(strOldPic); int intWidth = Convert.ToInt32((objPic.Width) * balance); int intHeight = Convert.ToInt32((objPic.Height) * balance); objNewPic = new System.Drawing.Bitmap(objPic, intWidth, intHeight); objNewPic.Save(strNewPic); objPic.Dispose(); objNewPic.Dispose(); if (isDeleteOldPic) { if (File.Exists(strOldPic)) { File.Delete(strOldPic); } } } catch (Exception exp) { throw exp; } finally { objPic = null; objNewPic = null; } } /**//// <summary> /// 获取图片指定部分 /// </summary> /// <param name="pPath">图片路径</param> /// <param name="pSavePath">保存路径</param> /// <param name="pPartStartPointX">目标图片开始绘制处的坐标X值(通常为)</param> /// <param name="pPartStartPointY">目标图片开始绘制处的坐标Y值(通常为)</param> /// <param name="pPartWidth">目标图片的宽度</param> /// <param name="pPartHeight">目标图片的高度</param> /// <param name="pOrigStartPointX">原始图片开始截取处的坐标X值</param> /// <param name="pOrigStartPointY">原始图片开始截取处的坐标Y值</param> public void ReducePic(string pPath, string pSavedPath, int pPartStartPointX, int pPartStartPointY, int pPartWidth, int pPartHeight, int pOrigStartPointX, int pOrigStartPointY) { System.Drawing.Image originalImg = System.Drawing.Image.FromFile(pPath); Bitmap partImg = new Bitmap(pPartWidth, pPartHeight); Graphics graphics = Graphics.FromImage(partImg); Rectangle destRect = new Rectangle(new Point(pPartStartPointX, pPartStartPointY), new Size(pPartWidth, pPartHeight));//目标位置 Rectangle origRect = new Rectangle(new Point(pOrigStartPointX, pOrigStartPointY), new Size(pPartWidth, pPartHeight));//原图位置(默认从原图中截取的图片大小等于目标图片的大小) graphics.DrawImage(originalImg, destRect, origRect, GraphicsUnit.Pixel); partImg.Save(pSavedPath, ImageFormat.Jpeg); } #endregion 添加水印文字#region 添加水印文字 /**//// <summary> /// 为上传的图片添加水印文字 /// </summary> /// <param name="Path">原始图片路径</param> /// <param name="Path_sy">水印图片路径</param> /// <param name="WaterText">水印文字</param> public void AddWaterText(string Path, string Path_sy, string WaterText) { string addText = WaterText; System.Drawing.Image image = System.Drawing.Image.FromFile(Path); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image); g.DrawImage(image, 0, 0, image.Width, image.Height); System.Drawing.Font f = new System.Drawing.Font("Verdana", 10); System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.LightSlateGray); g.DrawString(addText, f, b, image.Width - 100, image.Height - 20); g.Dispose(); image.Save(Path_sy); image.Dispose(); } #endregion 为图片增加水印图片#region 为图片增加水印图片 /**//// <summary> /// 在图片上生成图片水印 /// </summary> /// <param name="Path">原服务器图片路径</param> /// <param name="Path_syp">生成的带图片水印的图片路径</param> /// <param name="Path_sypf">水印图片路径</param> public void AddWaterPic(string Path, string Path_syp, string Path_sypf) { System.Drawing.Image image = System.Drawing.Image.FromFile(Path); System.Drawing.Image copyImage = System.Drawing.Image.FromFile(Path_sypf); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image); 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); g.Dispose(); image.Save(Path_syp); image.Dispose(); } #endregion 获取图片的高度和宽度#region 获取图片的高度和宽度 /**//// <summary> /// 获取图片的高度和宽度 /// </summary> /// <param name="imgurl">img图片的地址</param> /// <returns></returns> public int[] GetImgWidth(string imgurl) { System.Drawing.Image image; image = System.Drawing.Image.FromFile(imgurl); int imgwidth = image.Width; int imgHeight = image.Height; int[] img = { imgwidth, imgHeight }; return img; } #endregion 压缩图片#region 压缩图片 /**//// <summary> /// 对图片进行压缩 /// </summary> /// <param name="filePath">原始图片路径</param> /// <param name="filePath_ystp">压缩后的图片路径</param> public void DensityPic(string filePath, string filePath_ystp) //压缩图片 { Bitmap bmp = new Bitmap(filePath); //ImageCoderInfo ImageCodecInfo ici = null; //Encoder System.Drawing.Imaging.Encoder ecd = null; //EncoderParameter EncoderParameter ept = null; //EncoderParameters EncoderParameters eptS = null; try { ici = this.getImageCoderInfo("image/jpeg"); ecd = System.Drawing.Imaging.Encoder.Quality; eptS = new EncoderParameters(1); ept = new EncoderParameter(ecd, 10L); eptS.Param[0] = ept; bmp.Save(filePath_ystp, ici, eptS); } catch (Exception ex) { throw new Exception(ex.Message); } finally { bmp.Dispose(); ept.Dispose(); eptS.Dispose(); } } private ImageCodecInfo getImageCoderInfo(string coderType)// 获取图片编码类型信息 { ImageCodecInfo[] iciS = ImageCodecInfo.GetImageEncoders(); ImageCodecInfo retIci = null; foreach (ImageCodecInfo ici in iciS) { if (ici.MimeType.Equals(coderType)) retIci = ici; } return retIci; } #endregion 获取图片的指定部分#region 获取图片的指定部分 /**//**/ /**//// <summary> /// 获取图片指定部分 /// </summary> /// <param name="pPath">图片路径</param> /// <param name="pSavePath">保存路径</param> /// <param name="pPartStartPointX">目标图片开始绘制处的坐标X值(通常为)</param> /// <param name="pPartStartPointY">目标图片开始绘制处的坐标Y值(通常为)</param> /// <param name="pPartWidth">目标图片的宽度</param> /// <param name="pPartHeight">目标图片的高度</param> /// <param name="pOrigStartPointX">原始图片开始截取处的坐标X值</param> /// <param name="pOrigStartPointY">原始图片开始截取处的坐标Y值</param> /// <param name="pFormat">保存格式,通常可以是jpeg</param> public void GetPart(string pPath, string pSavedPath, int pPartStartPointX, int pPartStartPointY, int pPartWidth, int pPartHeight, int pOrigStartPointX, int pOrigStartPointY) { string normalJpgPath = pSavedPath; using (System.Drawing.Image originalImg = System.Drawing.Image.FromFile(pPath)) { Bitmap partImg = new Bitmap(pPartWidth, pPartHeight); Graphics graphics = Graphics.FromImage(partImg); Rectangle destRect = new Rectangle(new Point(pPartStartPointX, pPartStartPointY), new Size(pPartWidth, pPartHeight));//目标位置 Rectangle origRect = new Rectangle(new Point(pOrigStartPointX, pOrigStartPointY), new Size(pPartWidth, pPartHeight));//原图位置(默认从原图中截取的图片大小等于目标图片的大小) /**////文字水印 System.Drawing.Graphics G = System.Drawing.Graphics.FromImage(partImg); System.Drawing.Font f = new Font("Lucida Grande", 6); System.Drawing.Brush b = new SolidBrush(Color.Gray); G.Clear(Color.White); graphics.DrawImage(originalImg, destRect, origRect, GraphicsUnit.Pixel); G.DrawString("TianTang.Com", f, b, 0, 0); G.Dispose(); originalImg.Dispose(); if (File.Exists(normalJpgPath)) { File.SetAttributes(normalJpgPath, FileAttributes.Normal); File.Delete(normalJpgPath); } partImg.Save(normalJpgPath, ImageFormat.Jpeg); } } #endregion 获取图片的指定部分#region 获取图片的指定部分 /**//**/ /**//// <summary> /// 获取按比例缩放的图片指定部分 /// </summary> /// <param name="pPath">图片路径</param> /// <param name="pSavePath">保存路径</param> /// <param name="pPartStartPointX">目标图片开始绘制处的坐标X值(通常为)</param> /// <param name="pPartStartPointY">目标图片开始绘制处的坐标Y值(通常为)</param> /// <param name="pPartWidth">目标图片的宽度</param> /// <param name="pPartHeight">目标图片的高度</param> /// <param name="pOrigStartPointX">原始图片开始截取处的坐标X值</param> /// <param name="pOrigStartPointY">原始图片开始截取处的坐标Y值</param> /// <param name="imageWidth">缩放后的宽度</param> /// <param name="imageHeight">缩放后的高度</param> public void GetPart(string pPath, string pSavedPath, int pPartStartPointX, int pPartStartPointY, int pPartWidth, int pPartHeight, int pOrigStartPointX, int pOrigStartPointY, int imageWidth, int imageHeight) { string normalJpgPath = pSavedPath; using (System.Drawing.Image originalImg = System.Drawing.Image.FromFile(pPath)) { if (originalImg.Width == imageWidth && originalImg.Height == imageHeight) { GetPart(pPath, pSavedPath, pPartStartPointX, pPartStartPointY, pPartWidth, pPartHeight, pOrigStartPointX, pOrigStartPointY); return; } System.Drawing.Image.GetThumbnailImageAbort callback = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback); System.Drawing.Image zoomImg = originalImg.GetThumbnailImage(imageWidth, imageHeight, callback, IntPtr.Zero);//缩放 Bitmap partImg = new Bitmap(pPartWidth, pPartHeight); Graphics graphics = Graphics.FromImage(partImg); Rectangle destRect = new Rectangle(new Point(pPartStartPointX, pPartStartPointY), new Size(pPartWidth, pPartHeight));//目标位置 Rectangle origRect = new Rectangle(new Point(pOrigStartPointX, pOrigStartPointY), new Size(pPartWidth, pPartHeight));//原图位置(默认从原图中截取的图片大小等于目标图片的大小) /**////文字水印 System.Drawing.Graphics G = System.Drawing.Graphics.FromImage(partImg); System.Drawing.Font f = new Font("Lucida Grande", 6); System.Drawing.Brush b = new SolidBrush(Color.Gray); G.Clear(Color.White); graphics.DrawImage(zoomImg, destRect, origRect, GraphicsUnit.Pixel); G.DrawString("TianTang.Com", f, b, 0, 0); G.Dispose(); originalImg.Dispose(); if (File.Exists(normalJpgPath)) { File.SetAttributes(normalJpgPath, FileAttributes.Normal); File.Delete(normalJpgPath); } partImg.Save(normalJpgPath, ImageFormat.Jpeg); } } public bool ThumbnailCallback() { return false; } #endregion } }