日期:2014-05-18 浏览次数:21345 次
/// <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