asp.net 根据图片路径生成缩略图

来源:互联网 发布:淘宝联盟上商品优惠券 编辑:程序博客网 时间:2024/04/29 00:37
/// <summary>
        /// 生成缩略图
        /// </summary>
        /// <param name="originalImagePath">原图位置</param>
        /// <param name="thumbnailPath">缩略图保存位置</param>
        /// <param name="width">需要改变的大小(宽高相同的正方形)</param>
        public void CreateMinImageAndDel(string originalImagePath, string thumbnailPath, int width,int height)
        {
            Graphics draw = null;
            string FileExt = "";
            if (!Directory.Exists(thumbnailPath))
            {
                Directory.CreateDirectory(thumbnailPath);
            }
            System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);
            string photoExtesion = System.IO.Path.GetExtension(originalImagePath).ToLower();


            //缩略图位置
            int toX = 0;
            int toY = 0;


            //原图的宽和高
            int ow = originalImage.Width;
            int oh = originalImage.Height;


            //缩略图的宽和高
            int toWidth = 0;
            int toHeight = 0;


            // 宽高比例,的两种特殊情况处理
            if (ow < oh)
            {
                toWidth = Convert.ToInt32(Convert.ToDouble(ow) * (Convert.ToDouble(width) / Convert.ToDouble(oh)));
                toHeight = width;


                // 计算显示位置
                toX = (toHeight - toWidth) / 2;
            }
            else
            {
                toWidth = width;
                toHeight = Convert.ToInt32(Convert.ToDouble(oh) * (Convert.ToDouble(width) / Convert.ToDouble(ow)));


                // 计算显示位置
                toY = (toWidth - toHeight) / 2;
            }


            //新建一个bmp图片
            System.Drawing.Image bitmap = new System.Drawing.Bitmap(width, width);
            System.Drawing.Image bitmap2 = new System.Drawing.Bitmap(width, width);


            //新建一个画板
            System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);




            //设置高质量插值法
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;


            //设置高质量,低速度呈现平滑程度
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;


            //清空画布并以透明背景色填充
            g.Clear(System.Drawing.Color.Transparent);
            //g.Clear(System.Drawing.Color.White);


            //在指定位置并且按指定大小绘制原图片的指定部分
            g.DrawImage(originalImage, new System.Drawing.Rectangle(toX, toY, toWidth, toHeight));


            try
            {
                //以jpg格式保存缩略图
                FileExt = Path.GetFileNameWithoutExtension(originalImagePath);


                //用新建立的image对象拷贝bitmap对象 让g对象可以释放资源
                draw = Graphics.FromImage(bitmap2);
                draw.DrawImage(bitmap, 0, 0);


            }
            catch (System.Exception e)
            {
                throw e;
            }
            finally
            {
                originalImage.Dispose();
                bitmap.Dispose();
                g.Dispose();


                //保存调整在这里即可 
                    bitmap2.Save(thumbnailPath + FileExt + ".png", System.Drawing.Imaging.ImageFormat.Png);
            }

        }

调用:

     原图路径:

    string url = Server.MapPath("images/TemporaryImage/BigPhoto/" + newname);

    // 生成小图路径
            string bcurl = Server.MapPath("images/TemporaryImage/SmallPhoto/");


            CreateMinImageAndDel(url, bcurl, 180,180);

0 0