图片等比例缩放

      由于最近开发的项目中需要对上传的大图片做裁剪、缩放处理。所以整理了一下。特此记录。

        方法: 

      public class ImageHandler

    {
        /// <summary>
        
/// 对上传的图片进行等比缩放
        
/// </summary>
        
/// http://www.cnblogs.com/babycool
        
/// <param name="fromFile">获取文件流Stream</param>
        
/// <param name="fileSaveUrl">缩略图保存完整路径</param>
        
/// <param name="targetWidth">模板宽度</param>
        
/// <param name="targetHeight">模板高度</param>
        public static void ZoomPic(System.IO.Stream fromFile, string fileSaveUrl, System.Double targetWidth, System.Double targetHeight)
        {
            //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)
            System.Drawing.Image initImage = System.Drawing.Image.FromStream(fromFile, true);
            //原图宽高均小于模版,不作处理,直接保存
            if (initImage.Width <= targetWidth && initImage.Height <= targetHeight)
            {
                //保存
                initImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
            else
            {
                //缩略图宽、高计算
                double newWidth = initImage.Width;
                double newHeight = initImage.Height;
              //宽大于高或宽等于高(横图或正方)
                if (initImage.Width > initImage.Height || initImage.Width == initImage.Height)
                {
                    //如果宽大于模版
                    if (initImage.Width > targetWidth)
                    {
                        //宽按模版,高按比例缩放
                        newWidth = targetWidth;
                        newHeight = initImage.Height * (targetWidth / initImage.Width);
                    }
                }
                //高大于宽(竖图)
                else
                {
                    //如果高大于模版
                    if (initImage.Height > targetHeight)
                    {
                        //高按模版,宽按比例缩放
                        newHeight = targetHeight;
                        newWidth = initImage.Width * (targetHeight / initImage.Height);
                    }
                }

                //生成新图
                
//新建一个bmp图片
                System.Drawing.Image newImage = new System.Drawing.Bitmap((int)newWidth, (int)newHeight);
                //新建一个画板
                System.Drawing.Graphics newG = System.Drawing.Graphics.FromImage(newImage);
                //设置质量
                newG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                newG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

                //置背景色
                newG.Clear(Color.White);
                //画图
                newG.DrawImage(initImage, new System.Drawing.Rectangle(00, newImage.Width, newImage.Height), new System.Drawing.Rectangle(00, initImage.Width, initImage.Height), System.Drawing.GraphicsUnit.Pixel);

                //保存缩略图
                newImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);
                //释放资源
                newG.Dispose();
                newImage.Dispose();
                initImage.Dispose();
            }
            
        }
    }

 调用:

        //接收上传后的文件

       HttpPostedFile file = context.Request.Files["Filedata"];

        //处理图片

       ImageHandler.ZoomPic(file.InputStream, uploadPath + file.FileName, 435,600);

注意:ZoomPic方法中的第二个参数“fileSaveUrl”是缩略图保存的完整路径如“uploadPath\123.jpg”的形式,如果只有目录路径则会报“GDI+中发生一般性错误。”的错误提示。所以这里一定要注意写全。

 相关文章参考:

       C#图片处理示例(裁剪,缩放,清晰度,水印)

 原创文章,转载请注明出处。

原文地址:https://www.cnblogs.com/babycool/p/2775916.html