C# Ajax上传图片同时生成微缩图(附Demo)

 

 

1.Ajax无刷新上传图片,详情请阅我的这篇文章。(jquery + c# ashx)

        2.C#位图处理  System.Drawing。

        3.最新demo支持IE7,IE8,FireFox。

生成微缩图的核心方法:

 

CreateThumbnailPicture

        /// <summary>
        /// 图片微缩图处理
        /// </summary>
        /// <param name="srcPath">源图片</param>
        /// <param name="destPath">目标图片</param>
        /// <param name="width">宽度</param>
        /// <param name="height">高度</param>
        public static void CreateThumbnailPicture(string srcPath, string destPath, int width, int height)
        {
            //根据图片的磁盘绝对路径获取 源图片 的Image对象
            System.Drawing.Image img = System.Drawing.Image.FromFile(srcPath);

            //bmp: 最终要建立的 微缩图 位图对象。
            Bitmap bmp = new Bitmap(width, height);

            //g: 绘制 bmp Graphics 对象
            Graphics g = Graphics.FromImage(bmp);
            g.Clear(Color.Transparent);
            //为Graphics g 对象 初始化必要参数,很容易理解。
            g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

            //源图片宽和高
            int imgWidth = img.Width;
            int imgHeight = img.Height;

            //绘制微缩图
            g.DrawImage(img, new System.Drawing.Rectangle(0, 0, width, height), new System.Drawing.Rectangle(0, 0, imgWidth, imgHeight)
                        , GraphicsUnit.Pixel);

            ImageFormat format = img.RawFormat;
            ImageCodecInfo info = ImageCodecInfo.GetImageEncoders().SingleOrDefault(i => i.FormatID == format.Guid);
            EncoderParameter param = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
            EncoderParameters parameters = new EncoderParameters(1);
            parameters.Param[0] = param;
            img.Dispose();

            //保存已生成微缩图,这里将GIF格式转化成png格式。
            if (format == ImageFormat.Gif)
            {
                destPath = destPath.ToLower().Replace(".gif", ".png");
                bmp.Save(destPath, ImageFormat.Png);
            }
            else
            {
                if (info != null)
                {
                    bmp.Save(destPath, info, parameters);
                }
                else
                {

                    bmp.Save(destPath, format);
                }
            }

            img.Dispose();
            g.Dispose();
            bmp.Dispose();
        }

 

 

下面介绍ashx中AJAX调用方法,我们在AJAX异步上传图片成功后对源图片进行"PS"。关键代码片段如下:

 

//上传成功后网站内源图片相对路径
  string relativePath = System.Web.HttpContext.Current.Request.ApplicationPath 
                       + string.Format(@"Content/Upload/Images/{0}", fileName);

 /*
   比例处理
   微缩图高度(DefaultHeight属性值为 400)
 */
 System.Drawing.Image img = System.Drawing.Image.FromFile(toFile);
 int width = img.Width;
 int height = img.Height;
 float ratio = (float)width / height;

 //微缩图高度和宽度
  int newHeight = height <= DefaultHeight ? height : DefaultHeight;
 int newWidth = height <= DefaultHeight ? width : Convert.ToInt32(DefaultHeight * ratio);

 FileInfo generatedfile = new FileInfo(toFile);
 string newFileName = "Thumb_" + generatedfile.Name;
 string newFilePath = Path.Combine(generatedfile.DirectoryName, newFileName);

 PictureHandler.CreateThumbnailPicture(toFile, newFilePath, newWidth, newHeight);

 string thumbRelativePath = System.Web.HttpContext.Current.Request.ApplicationPath 
                       + string.Format(@"/Content/Upload/Images/{0}", newFileName);

 //返回原图和微缩图的网站相对路径
  relativePath = string.Format("{0},{1}", relativePath, thumbRelativePath);

 return relativePath;

 

demo 见附件http://dl2.iteye.com/upload/attachment/0109/2590/06f8f52b-f228-35c3-9391-6b43bd18e3d6.rar

 

 

你可能感兴趣的:(C# Ajax上传图片同时生成微缩图(附Demo))