找到要抓取的圖片地址: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; } }
注意,這里的代碼僅供測試,使用時請自行完善。