C# 生成缩略图

imageTest  image操作helper类

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 //----引入必要的命名空间
  7 using System.IO;
  8 using System.Drawing.Imaging;
  9 using System.Drawing;
 10 using System.Net;
 11 
 12 namespace ImageTestConsole
 13 {
 14 
 15     public class imageTest
 16     {
 17 
 18         //----代码部分----//
 19 
 20         public byte[] photo;//公用缓冲区
 21         public string SourFilePath;//源图片文件路径
 22         public string ObjFilePath;//目标图片路径
 23 
 24         public int FileToStream()//文件到流的转换
 25         {
 26             Image img = new Bitmap(SourFilePath);
 27             MemoryStream stream = new MemoryStream();
 28             img.Save(stream, ImageFormat.Bmp);
 29             BinaryReader br = new BinaryReader(stream);
 30             photo = stream.ToArray();
 31             stream.Close();
 32             return 0;
 33         }
 34 
 35         public Image ShowPic()//根据流显图
 36         {
 37             byte[] bytes = photo;
 38             MemoryStream ms = new MemoryStream(bytes);
 39             ms.Position = 0;
 40             Image img = Image.FromStream(ms);
 41             ms.Close();
 42             return img;
 43         }
 44 
 45         public int StreamToFile()//反向转换
 46         {
 47             byte[] bytes = photo;
 48             FileStream fs = new FileStream(ObjFilePath, FileMode.Create, FileAccess.Write);
 49             fs.Write(bytes, 0, bytes.Length);
 50             fs.Flush();
 51             fs.Close();
 52             return 0;
 53         }
 54 
 55 
 56         #region 缩略图
 57 
 58 
 59         public void ThumnImage(string serverUrl)
 60         {
 61 
 62             var fileList = GetImageList(serverUrl);
 63 
 64             //var tbumbList = GetThumbImage(serverUrl);
 65 
 66             fileList.ForEach(x =>
 67             {
 68                 photo = toImage(x.FileUrl);
 69                 ObjFilePath = x.FileUrl.Substring(0, x.FileUrl.LastIndexOf('\\') + 1) + x.FileName.Substring(0, x.FileName.LastIndexOf('.')) + ".thumb.png";
 70                 StreamToFile();
 71             });
 72 
 73         }
 74 
 75         /// <summary>
 76         /// 查找所有jpg并返回filemodel
 77         /// </summary>
 78         /// <param name="url">绝对路径</param>
 79         /// <returns></returns>
 80         public List<FileHelperModel> GetImageList(string url)
 81         {
 82             //设置相对路径
 83             string imgurl = url;
 84 
 85             //根据相对路径,读取所有文件,并且不查找子文件夹。之后筛选格式是图片的文件
 86             //var strs = System.IO.Directory.GetFiles(imgurl, "*.*", System.IO.SearchOption.TopDirectoryOnly).Where(s => s.EndsWith(".jpg") || s.EndsWith(".gif") || s.EndsWith(".bmp") || s.EndsWith(".png"));
 87 
 88             var strs = System.IO.Directory.GetFiles(imgurl, "*.*", System.IO.SearchOption.TopDirectoryOnly).Where(s => s.EndsWith(".jpg") || s.EndsWith(".jpeg"));
 89 
 90             List<FileHelperModel> filelist = new List<FileHelperModel>();
 91             var i = 0;
 92             foreach (string file in strs)
 93             {
 94                 //读取文件信息
 95                 System.IO.FileInfo fi = new System.IO.FileInfo(file);
 96                 //if (fi.Extension == ".jpg" || fi.Extension == ".gif" || fi.Extension == ".bmp" || fi.Extension == ".png")
 97                 if (fi.Extension == ".jpg" || fi.Extension == ".jpeg")
 98                 {
 99                     i++;
100                     //获取文件名
101                     var fileModel = new FileHelperModel();
102                     fileModel.ID = i;
103                     fileModel.FileName = fi.Name;
104                     fileModel.FileUrl = file;
105 
106                     filelist.Add(fileModel);
107                 }
108             }
109 
110             return filelist;
111         }
112 
113 
114         public List<FileHelperModel> GetThumbImage(string url)
115         {
116             //设置相对路径
117             string imgurl = url;
118 
119             //根据相对路径,读取所有文件,并且不查找子文件夹。之后筛选格式是图片的文件
120             //var strs = System.IO.Directory.GetFiles(imgurl, "*.*", System.IO.SearchOption.TopDirectoryOnly).Where(s => s.EndsWith(".jpg") || s.EndsWith(".gif") || s.EndsWith(".bmp") || s.EndsWith(".png"));
121 
122             var strs = System.IO.Directory.GetFiles(imgurl, "*.*", System.IO.SearchOption.TopDirectoryOnly).Where(s => s.Contains("thumb"));
123 
124             List<FileHelperModel> filelist = new List<FileHelperModel>();
125             var i = 0;
126             foreach (string file in strs)
127             {
128                 //读取文件信息
129                 System.IO.FileInfo fi = new System.IO.FileInfo(file);
130                 //if (fi.Extension == ".jpg" || fi.Extension == ".gif" || fi.Extension == ".bmp" || fi.Extension == ".png")
131                 if (fi.Extension == ".jpg" || fi.Extension == ".jpeg" || fi.Extension == ".png")
132                 {
133                     i++;
134                     //获取文件名
135                     var fileModel = new FileHelperModel();
136                     fileModel.ID = i;
137                     fileModel.FileName = fi.Name;
138                     fileModel.FileUrl = file;
139 
140                     filelist.Add(fileModel);
141                 }
142             }
143             return filelist;
144         }
145 
146         /// <summary>
147         /// 缩略图
148         /// shidd
149         /// </summary>
150         /// <param name="myStream">文件流</param>
151         /// <param name="serverUrl">文件名</param>
152         /// <returns>字节数组</returns>
153         public byte[] toImage(string serverUrl)
154         {
155             string path = serverUrl;
156             Stream myStream = WebRequest.Create(path).GetResponse().GetResponseStream();
157 
158             //生成缩略图
159             //创建改变后的Stream
160             var stream = new System.IO.MemoryStream();
161             //取得后缀名
162             string suffix = serverUrl.Substring(serverUrl.LastIndexOf("."));
163             //创建一个图像对象取得上传图片对象
164             System.Drawing.Image myImage = System.Drawing.Image.FromStream(myStream, false);
165             //int percentage= myImage.Height / myImage.Width;//原图片比例
166             //由上传图片产生一个缩略图(600*400)
167             var width = 600;
168             var height = 400;
169 
170             width = 100;
171             height = 100;
172 
173             System.Drawing.Image thumbImage = myImage.GetThumbnailImage(width, height, null, System.IntPtr.Zero);
174             //保存缩略图到Stream流
175             thumbImage.Save(stream, this.getImageFormat(suffix));
176             //关闭缩略图对象
177             thumbImage.Dispose();
178             return stream.ToArray();
179         }
180 
181 
182         /// <summary>
183         /// 图片格式
184         /// </summary>
185         /// <param name="suffix">文件后缀</param>
186         /// <returns></returns>
187         private System.Drawing.Imaging.ImageFormat getImageFormat(string suffix)
188         {
189             System.Drawing.Imaging.ImageFormat myFormat;
190             switch (suffix.ToLower())
191             {
192                 case ".bmp":
193                     myFormat = System.Drawing.Imaging.ImageFormat.Bmp;
194                     break;
195                 case ".emf":
196                     myFormat = System.Drawing.Imaging.ImageFormat.Emf;
197                     break;
198                 case ".exif":
199                     myFormat = System.Drawing.Imaging.ImageFormat.Exif;
200                     break;
201                 case ".gif":
202                     myFormat = System.Drawing.Imaging.ImageFormat.Gif;
203                     break;
204                 case ".icon":
205                     myFormat = System.Drawing.Imaging.ImageFormat.Icon;
206                     break;
207                 case ".jpeg":
208                 case ".jpg":
209                     myFormat = System.Drawing.Imaging.ImageFormat.Jpeg;
210                     break;
211                 case ".png":
212                     myFormat = System.Drawing.Imaging.ImageFormat.Png;
213                     break;
214                 case ".tiff":
215                     myFormat = System.Drawing.Imaging.ImageFormat.Tiff;
216                     break;
217                 case ".wmf":
218                     myFormat = System.Drawing.Imaging.ImageFormat.Wmf;
219                     break;
220                 default:
221                     myFormat = System.Drawing.Imaging.ImageFormat.MemoryBmp;
222                     break;
223             }
224             return (myFormat);
225         }
226 
227         #endregion
228     }
229 
230     public class FileHelperModel
231     {
232         public int ID { get; set; }
233 
234         public string FileName { get; set; }
235 
236         public string FileUrl { get; set; }
237 
238     }
239 }

控制台生成缩略图

 1         static void Main(string[] args)
 2         {
 3             imageTest imageTest = new imageTest();
 4             imageTest.ThumnImage(@"E:\Test");
 5 
 6             //var t = @"E:\Test1\555.png";
 7             //var str = t.Substring(t.LastIndexOf('\\') + 1);
 8             //var te = t.Substring(0, t.LastIndexOf('\\') + 1);
 9             //Console.WriteLine(te + "  " + str);
10             Console.ReadLine();
11         }

 

posted @ 2020-08-03 11:19  xiaojianjian  阅读(346)  评论(0)    收藏  举报