码迷,mamicode.com
首页 > Web开发 > 详细

.NET 等宽、等高、等比例、固定宽高生成缩略图 类

时间:2017-06-07 12:55:09      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:system   pat   reg   form   stat   模式   高质量   from   背景色   

根据原图片生成等比缩略图

#region 根据原图片生成等比缩略图
        /// <summary>  
        /// 根据源图片生成缩略图  
        /// </summary>  
        /// <param name="imgPath_old">源图(大图)物理路径</param>  
        /// <param name="imgPath_new">缩略图物理路径(生成的缩略图将保存到该物理位置)</param>  
        /// <param name="width">缩略图宽度</param>  
        /// <param name="height">缩略图高度</param>  
        /// <param name="mode">缩略图缩放模式(取值"HW":指定高宽缩放,可能变形;取值"W":按指定宽度,高度按比例缩放;取值"H":按指定高度,宽度按比例缩放;取值"Cut":按指定高度和宽度裁剪,不变形);取值"DB":等比缩放,以值较大的作为标准进行等比缩放</param>  
        /// <param name="type">即将生成缩略图的文件的扩展名(仅限:JPG、GIF、PNG、BMP)</param>  
        public static void MakeThumbnail(string imgPath_old, string imgPath_new, int width, int height, string mode, string imageType, int xx, int yy)
        {
            System.Drawing.Image img = System.Drawing.Image.FromFile(imgPath_old);
            int towidth = width; int toheight = height;
            int x = 0; int y = 0; int ow = img.Width;
            int oh = img.Height; switch (mode)
            {
                case "HW":  //指定高宽压缩
                    if ((double)img.Width / (double)img.Height > (double)width / (double)height)//判断图形是什么形状
                    {
                        towidth = width;
                        toheight = img.Height * width / img.Width;
                    }
                    else if ((double)img.Width / (double)img.Height == (double)width / (double)height)
                    {
                        towidth = width;
                        toheight = height;
                    }
                    else
                    {
                        toheight = height;
                        towidth = img.Width * height / img.Height;
                    }
                    break;
                case "W":  //指定宽,高按比例   
                    toheight = img.Height * width / img.Width;
                    break;
                case "H":  //指定高,宽按比例  
                    towidth = img.Width * height / img.Height;
                    break;
                case "Cut":   //指定高宽裁减(不变形)   
                    if ((double)img.Width / (double)img.Height > (double)towidth / (double)toheight)
                    {
                        oh = img.Height;
                        ow = img.Height * towidth / toheight;
                        y = yy; x = (img.Width - ow) / 2;
                    }
                    else
                    {
                        ow = img.Width;
                        oh = img.Width * height / towidth;
                        x = xx; y = (img.Height - oh) / 2;
                    } break;
                case "DB":    // 按值较大的进行等比缩放(不变形)   
                    if ((double)img.Width / (double)towidth < (double)img.Height / (double)toheight)
                    {
                        toheight = height;
                        towidth = img.Width * height / img.Height;
                    }
                    else
                    {
                        towidth = width;
                        toheight = img.Height * width / img.Width;
                    } break;
                default:
                    break;
            }
            //新建一个bmp图片  
            System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
            //新建一个画板  
            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.DrawImage(img, new System.Drawing.Rectangle(0, 0, towidth, toheight),
            new System.Drawing.Rectangle(x, y, ow, oh),
            System.Drawing.GraphicsUnit.Pixel); try
            {
                //以jpg格式保存缩略图 
                switch (imageType.ToLower())
                {
                    case "gif":
                        img.Save(imgPath_new, ImageFormat.Jpeg);//生成缩略图
                        break;
                    case "jpg":
                        bitmap.Save(imgPath_new, System.Drawing.Imaging.ImageFormat.Jpeg);
                        break;
                    case "bmp":
                        bitmap.Save(imgPath_new, System.Drawing.Imaging.ImageFormat.Bmp);
                        break;
                    case "png":
                        bitmap.Save(imgPath_new, System.Drawing.Imaging.ImageFormat.Png);
                        break;
                    default:
                        bitmap.Save(imgPath_new, System.Drawing.Imaging.ImageFormat.Jpeg);
                        break;
                }
                ////保存缩略图  
                // bitmap.Save(imgPath_new);
            }
            catch (System.Exception e)
            {
                throw e;
            }
            finally
            {
                img.Dispose();
                bitmap.Dispose(); g.Dispose();
            }
        }
        #endregion

 

.NET 等宽、等高、等比例、固定宽高生成缩略图 类

标签:system   pat   reg   form   stat   模式   高质量   from   背景色   

原文地址:http://www.cnblogs.com/china-chang/p/6955916.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!