日期:2014-05-18 浏览次数:21187 次
/// <summary> /// 方法入口 /// </summary> /// <param name="strOldPic">源图文件名(包括路径)</param> /// <param name="strNewPic">缩小后保存为文件名(包括路径)</param> /// <param name="intWidth">缩小至宽度</param> /// <param name="CropHeight">裁剪高度</param> /// <param name="AQuality">图片保存质量(1-100之间)</param> public string SmallPic1(string strOldPic, string strNewPic, float intWidth, int CropHeight, int AQuality) { System.Drawing.Bitmap objPic, objNewPic; try { objPic = new System.Drawing.Bitmap(strOldPic); float ImgWidth = objPic.Width;//获取图宽度 float ImgHeight = objPic.Height; float intHeight = (intWidth / ImgWidth) * ImgHeight; //计算出相同比例高度 int ConfirmHeight = Convert.ToInt32(intHeight); int Width = Convert.ToInt32(intWidth); objNewPic = new System.Drawing.Bitmap(objPic, Width, ConfirmHeight);// 生成流 return DoConvert(objNewPic, strNewPic, objNewPic.Width, CropHeight, AQuality);//裁剪并保存 } catch (Exception exp) { error.LogError("按比例裁剪图片,自动计算高度 出错:", exp); return "压缩失败"; } finally { objPic = null; objNewPic = null; } } /// <summary> /// 裁剪并缩放 /// </summary> /// <param name="ASrcFileName">源图片信息</param> /// <param name="ADestFileName">目标文件名称</param> /// <param name="AWidth">转换后的宽度(像素)</param> /// <param name="AHeight">转换后的高度(像素)</param> /// <param name="AQuality">保存质量(取值在1-100之间)</param> public string DoConvert(Bitmap ASrcFileName, string ADestFileName, int AWidth, int AHeight, int AQuality) { try { Bitmap ASrcImg = ASrcFileName;//赋值图片信息 //Image ASrcImg = Image.FromFile(ASrcFileName);//获取图片信息 //if (ASrcImg.Width <= AWidth && ASrcImg.Height <= AHeight) //{//图片的高宽均小于目标高宽,直接保存 // ASrcImg.Save(ADestFileName); // return; //} double ADestRate = AWidth * 1.0 / AHeight; double ASrcRate = ASrcImg.Width * 1.0 / ASrcImg.Height; //裁剪后的宽度 double ACutWidth = ASrcRate > ADestRate ? (ASrcImg.Height * ADestRate) : ASrcImg.Width; //裁剪后的高度 double ACutHeight = ASrcRate > ADestRate ? ASrcImg.Height : (ASrcImg.Width / ADestRate); //待裁剪的矩形区域,根据原图片的中心进行裁剪 Rectangle AFromRect = new Rectangle(Convert.ToInt32((ASrcImg.Width - ACutWidth) / 2), Convert.ToInt32((ASrcImg.Height - ACutHeight) / 2), (int)ACutWidth, (int)ACutHeight); //目标矩形区域 Rectangle AToRect = new Rectangle(0, 0, AWidth, AHeight); Image ADestImg = new Bitmap(AWidth, AHeight); Graphics ADestGraph = Graphics.FromImage(ADestImg); ADestGraph.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; ADestGraph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; ADestGraph.DrawImage(ASrcImg, AToRect, AFromRect, Graphi