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(); } } }
以沫浅夏----奔跑的孩子
个人博客地址:http://www.blog.liyang.love
个人博客地址:http://www.blog.liyang.love