找到要抓取的图片地址:http://i.imgur.com/8S7OaEB.jpg
抓取的步骤:
- 请求图片路径
- 获取返回的数据
- 将数据转换为stream
- 将stream转换为Image
- 保存Image
明晰了步骤,接下来就简单了,直接上代码
public class RemoteImageCatchUtil { private static string[] ImageExts = new[] { "jpg", "jpeg", "png", "bitmap", "gif" }; public static string Catch(string remoteImagePath, string saveFolder, int timeout = 2000) { try { var request = WebRequest.Create(remoteImagePath) as HttpWebRequest; request.Timeout = timeout > 0 ? timeout : 1000; using (var response = request.GetResponse() as HttpWebResponse) { if (response.StatusCode != HttpStatusCode.OK) { throw new Exception("远程访问失败"); } else { var ext = GetImageExtension(response.ContentType).ToLower(); if (!ImageExts.Contains(ext)) { throw new Exception("非图片文件"); } var stream = response.GetResponseStream(); var buffer = new byte[2048]; int count; using (var ms = new MemoryStream()) { while ((count = stream.Read(buffer, 0, buffer.Length)) != 0) { ms.Write(buffer, 0, count); } if (!Directory.Exists(saveFolder)) { Directory.CreateDirectory(saveFolder); } var imageName = Path.GetRandomFileName() + "." + ext; var imagePath = Path.Combine(saveFolder, imageName); var image = new Bitmap(ms); image.Save(imagePath); return imageName; } } } } catch(Exception ex) { throw ex; } } private static string GetImageExtension(string contentType) { if (contentType.StartsWith("image")) { return contentType.Split(@"/").Last(); } return string.Empty; } }
注意,这里的代码仅供测试,使用时请自行完善。