做网站一定需要服务器吗,网站建设详细流程,wordpress会员修改,合肥建设管理学校网站写在前面
从浏览器的Html文本中获取图片链接并保存到本地#xff0c;同时对图片的分辨率和品质进行处理#xff0c;以满足某些平台的规格需求#xff1b;可以放到多线程中调用以提高下载效率。
代码实现 public class ImageDownloader{private int minImageSize 1024 * 1…写在前面
从浏览器的Html文本中获取图片链接并保存到本地同时对图片的分辨率和品质进行处理以满足某些平台的规格需求可以放到多线程中调用以提高下载效率。
代码实现 public class ImageDownloader{private int minImageSize 1024 * 10;private int limitImageSize 1024 * 1024;public Image SaveWebImage(string url, string savePath){try{if (url.EndsWith(gif))return null;using (var c new WebClient()){string imgUrl url;if (imgUrl.StartsWith(//)){imgUrl http: imgUrl;}var img Image.FromStream(new MemoryStream(c.DownloadData(imgUrl)));// 小图直接略过if (img.Width 200 || img.Height 200)return null;var r Resize(img, 640, 640, true);r.Save(savePath);var fileInfo new FileInfo(savePath);if (fileInfo.Length minImageSize) // 如果小于10kb那就是无效图片return r;if (fileInfo.Length limitImageSize) // 品质可以通过参数来控制{EncoderParameters encoderParams new EncoderParameters();long[] quality new long[1];quality[0] 85; // 品质参数最大为100EncoderParameter encoderParam new EncoderParameter(Encoder.Quality, quality);encoderParams.Param[0] encoderParam;ImageCodecInfo codecInfo GetEncoder(ImageFormat.Jpeg);r.Save(savePath, codecInfo, encoderParams);encoderParam.Dispose();encoderParams.Dispose();}img.Dispose();return r;}}catch (Exception ex){LogHelper.Error(ex);LogHelper.Error(error url: url);return null;}}public Image Resize(Image image, int newWidth, int maxHeight, bool onlyResizeIfWider){if (onlyResizeIfWider image.Width newWidth) newWidth image.Width;var newHeight image.Height * newWidth / image.Width;var res new Bitmap(newWidth, newHeight);using (var graphic Graphics.FromImage(res)){graphic.InterpolationMode InterpolationMode.HighQualityBicubic;graphic.SmoothingMode SmoothingMode.HighQuality;graphic.PixelOffsetMode PixelOffsetMode.HighQuality;graphic.CompositingQuality CompositingQuality.HighQuality;graphic.DrawImage(image, 0, 0, newWidth, newHeight);}return res;}#region Private Methodsprivate ImageCodecInfo GetEncoder(ImageFormat format){ImageCodecInfo[] codecs ImageCodecInfo.GetImageDecoders();foreach (ImageCodecInfo codec in codecs){if (codec.FormatID format.Guid){return codec;}}return null;}#endregion}