c#实现图片的缩略图

 
 1  1、项目使用      
 2         /// <summary>
 3         /// 生成缩略图,默认生成jpg格式
 4         /// </summary>
 5         /// <param name="images">图片转换成的字节流</param>
 6         /// <param name="fileName">图片所放的文件夹名称 注:里面会按照年月日生成文件夹</param>
 7         /// <param name="pictureName">图片名称</param>
 8         /// <returns></returns>
 9         public static string MakeThumbnail(byte[] images, string fileName, string pictureName)
10         {
11             string file = "/" + System.DateTime.Now.Year + "/" + System.DateTime.Now.Month + "/" + System.DateTime.Now.Day + "/";//文件夹目录
12 
13             StringBuilder path = new StringBuilder();
14             if (!string.IsNullOrWhiteSpace(ReadConfig.PictureConfig))
15             {
16                 path.Append(ReadConfig.PictureConfig);
17                 path.Append(fileName);
18                 path.Append(file);
19             }
20             else
21             {
22                 path.Append(AppDomain.CurrentDomain.BaseDirectory);
23                 path.Append(fileName);
24                 path.Append(file);
25             }
26             if (!Directory.Exists(path.ToString()))
27             {
28                 Directory.CreateDirectory(path.ToString());
29             }
30             using (System.IO.MemoryStream ms = new System.IO.MemoryStream(images))
31             {
32                 Image originalImage = Image.FromStream(ms);
33 
34                 int width = 150;
35                 int height = 150;
36                 int towidth = width;
37                 int toheight = height;
38                 int x = 0;
39                 int y = 0;
40                 int ow = originalImage.Width;
41                 int oh = originalImage.Height;
42 
43                 if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
44                 {
45                     oh = originalImage.Height;
46                     ow = originalImage.Height * towidth / toheight;
47                     y = 0;
48                     x = (originalImage.Width - ow) / 2;
49                 }
50                 else
51                 {
52                     ow = originalImage.Width;
53                     oh = originalImage.Width * height / towidth;
54                     x = 0;
55                     y = (originalImage.Height - oh) / 2;
56                 }
57 
58                 //新建一个bmp图片
59                 Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
60 
61                 //新建一个画板
62                 Graphics g = System.Drawing.Graphics.FromImage(bitmap);
63 
64                 //设置高质量插值法
65                 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
66 
67                 //设置高质量,低速度呈现平滑程度
68                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
69 
70                 //清空画布并以透明背景色填充
71                 g.Clear(Color.Transparent);
72 
73                 //在指定位置并且按指定大小绘制原图片的指定部分
74                 g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
75                     new Rectangle(x, y, ow, oh),
76                     GraphicsUnit.Pixel);
77 
78                 try
79                 {
80                     //以jpg格式保存缩略图
81                     string newpath = path.ToString() + pictureName;
82                     bitmap.Save(path.ToString() + pictureName + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
83                     return newpath;
84                 }
85                 catch (System.Exception e)
86                 {
87                     throw e;
88                 }
89                 finally
90                 {
91                     originalImage.Dispose();
92                     bitmap.Dispose();
93                     g.Dispose();
94                 }
95             }
96         }

 1 二、资源收集 
 2        /// <summary>
 3         /// 生成缩略图
 4         /// </summary>
 5         /// <param name="originalImagePath">源图路径(物理路径)</param>
 6         /// <param name="thumbnailPath">缩略图路径(物理路径)</param>
 7         /// <param name="width">缩略图宽度</param>
 8         /// <param name="height">缩略图高度</param>
 9         /// <param name="mode">生成缩略图的方式</param>    
10         public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
11         {
12             Image originalImage = Image.FromFile(originalImagePath);
13             
14             int towidth = width;
15             int toheight = height;
16         
17             int x = 0;
18             int y = 0;
19             int ow = originalImage.Width;
20             int oh = originalImage.Height;        
21 
22             switch (mode)
23             {        
24                 case "HW"://指定高宽缩放(可能变形)                
25                     break;
26                 case "W"://指定宽,高按比例                    
27                     toheight = originalImage.Height * width/originalImage.Width;
28                     break;
29                 case "H"://指定高,宽按比例
30                     towidth = originalImage.Width * height/originalImage.Height;                    
31                     break;        
32                 case "Cut"://指定高宽裁减(不变形)                
33                     if((double)originalImage.Width/(double)originalImage.Height > (double)towidth/(double)toheight)
34                     {
35                         oh = originalImage.Height;
36                         ow = originalImage.Height*towidth/toheight;
37                         y = 0;
38                         x = (originalImage.Width - ow)/2;
39                     }
40                     else
41                     {
42                         ow = originalImage.Width;
43                         oh = originalImage.Width*height/towidth;
44                         x = 0;
45                         y = (originalImage.Height - oh)/2;
46                     }
47                     break;                    
48                 default :
49                     break;
50             }    
51             
52             //新建一个bmp图片
53             Image bitmap = new System.Drawing.Bitmap(towidth,toheight);
54 
55             //新建一个画板
56             Graphics g = System.Drawing.Graphics.FromImage(bitmap);
57 
58             //设置高质量插值法
59             g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
60 
61             //设置高质量,低速度呈现平滑程度
62             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
63 
64             //清空画布并以透明背景色填充
65             g.Clear(Color.Transparent);        
66 
67             //在指定位置并且按指定大小绘制原图片的指定部分
68             g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight), 
69                 new Rectangle(x, y, ow,oh),
70                 GraphicsUnit.Pixel);
71 
72             try
73             {            
74                 //以jpg格式保存缩略图
75                 bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
76             }
77             catch(System.Exception e)
78             {
79                 throw e;
80             }
81             finally
82             {
83                 originalImage.Dispose();
84                 bitmap.Dispose();                        
85                 g.Dispose();
86             }
87         }

   /// <summary>
        /// 保存图片
        /// </summary>
        /// <param name="image">图片流</param>
        /// <param name="extension">扩展名</param>
        /// <param name="fileName">文件夹</param>
        /// <param name="Random">随机数</param>
        /// <returns></returns>
        public static string SaveImge(byte[] image, string extension, string fileName)
        {
            try
            {
                string file = "/" + fileName + "/" + System.DateTime.Now.Year + "/" + System.DateTime.Now.Month + "/" + System.DateTime.Now.Day + "/";//文件夹目录

                StringBuilder path = new StringBuilder();
                if (!string.IsNullOrWhiteSpace(ReadConfig.PictureConfig))
                {
                    path.Append(ReadConfig.PictureConfig);
                    path.Append(file);
                }
                else
                {
                    path.Append(AppDomain.CurrentDomain.BaseDirectory);
                    path.Append(file);
                }
                if (!Directory.Exists(path.ToString()))
                {
                    Directory.CreateDirectory(path.ToString());
                }
                string PictureName = System.DateTime.Now.ToString("HHmmssfff") + Guid.NewGuid().ToString().Replace("-", "");
                PictureName = PictureName + "." + extension;
                path.Append(PictureName);
                File.WriteAllBytes(path.ToString(), image);
                return file + PictureName;
            }
            catch
            {
                return null;
            }
        }

        /// <summary>
        /// 生成缩略图,默认生成jpg格式
        /// </summary>
        /// <param name="images">图片转换成的字节流</param>
        /// <param name="fileName">图片所放的文件夹名称 注:里面会按照年月日生成文件夹</param>
        /// <param name="pictureName">图片名称</param>
        /// <returns></returns>
        public static string MakeThumbnail(byte[] images, string fileName)
        {
            string file = "/" + fileName + "/" + System.DateTime.Now.Year + "/" + System.DateTime.Now.Month + "/" + System.DateTime.Now.Day + "/";//文件夹目录

            StringBuilder path = new StringBuilder();
            if (!string.IsNullOrWhiteSpace(ReadConfig.PictureConfig))
            {
                path.Append(ReadConfig.PictureConfig);
                path.Append(file);
            }
            else
            {
                path.Append(AppDomain.CurrentDomain.BaseDirectory);
                path.Append(file);
            }
            if (!Directory.Exists(path.ToString()))
            {
                Directory.CreateDirectory(path.ToString());
            }
            using (System.IO.MemoryStream ms = new System.IO.MemoryStream(images))
            {
                Image originalImage = Image.FromStream(ms);

                int width = 150;
                int height = 150;
                int towidth = width;
                int toheight = height;
                int x = 0;
                int y = 0;
                int ow = originalImage.Width;
                int oh = originalImage.Height;

                if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
                {
                    oh = originalImage.Height;
                    ow = originalImage.Height * towidth / toheight;
                    y = 0;
                    x = (originalImage.Width - ow) / 2;
                }
                else
                {
                    ow = originalImage.Width;
                    oh = originalImage.Width * height / towidth;
                    x = 0;
                    y = (originalImage.Height - oh) / 2;
                }

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

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

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

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

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

                //在指定位置并且按指定大小绘制原图片的指定部分
                g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
                    new Rectangle(x, y, ow, oh),
                    GraphicsUnit.Pixel);

                try
                {
                    //以jpg格式保存缩略图
                    string PictureName = System.DateTime.Now.ToString("HHmmssfff") + Guid.NewGuid().ToString().Replace("-", "") + ".jpg";
                    string newpath = path.ToString() + PictureName;
                    bitmap.Save(path.ToString() + PictureName, System.Drawing.Imaging.ImageFormat.Jpeg);
                    return file + PictureName;
                }
                catch (System.Exception e)
                {
                    throw e;
                }
                finally
                {
                    originalImage.Dispose();
                    bitmap.Dispose();
                    g.Dispose();
                }
            }
        }

 

 


 






 

 

posted @ 2014-11-05 10:38  以沫浅夏  阅读(1848)  评论(0编辑  收藏  举报