如何使用C#从url下载图片

有没有一种方法可以直接从c#中的URL下载图像,如果url没有在链接的末尾的图像格式? url示例:

https://fbcdn-sphotos-ha.akamaihd.net/hphotos-ak-xpf1/v/t34.0-12/10555140_10201501435212873_1318258071_n.jpg?oh=97ebc03895b7acee9aebbde7d6b002bf&oe=53C9ABB0&__gda__=1405685729_110e04e71d969d392b63b27ec4f4b24a 

我知道如何在url以图片格式结尾时下载图片。 例如:

 http://img1.wikia.nocookie.net/__cb20101219155130/uncyclopediahttp://img.dovov.com7/70/Facebooklogin.png 

简单你可以使用下面的方法。

  using (WebClient client = new WebClient()) { client.DownloadFile(new Uri(url), @"c:\temp\image35.png"); //OR client.DownloadFileAsync(new Uri(url), @"c:\temp\image35.png"); } 

这些方法几乎与DownloadString(..)和DownloadStringAsync(…)相同。 它们将文件存储在Directory中而不是C#string中,并且不需要URi中的格式扩展

如果你不知道图像的格式(.png,.jpeg等)

  public void SaveImage(string filename, ImageFormat format) { WebClient client = new WebClient(); Stream stream = client.OpenRead(imageUrl); Bitmap bitmap; bitmap = new Bitmap(stream); if (bitmap != null) bitmap.Save(filename, format); stream.Flush(); stream.Close(); client.Dispose(); } 

使用它

 try{ SaveImage("--- Any Image Path ---", ImageFormat.Png) }catch(ExternalException) { //Something is wrong with Format -- Maybe required Format is not // applicable here } catch(ArgumentNullException) { //Something wrong with Stream } 

根据你是否知道图像格式,你可以这样做:

将图像下载到文件,了解图像格式

 using (WebClient webClient = new WebClient()) { webClient.DownloadFile("http://yoururl.com/image.png", "image.png") ; } 

将图像下载到文件而不知道图像格式

您可以使用Image.FromStream来加载任何types的常用位图(jpg,png,bmp,gif,…),它会自动检测文件types,甚至不需要检查url扩展名(不是一个非常好的做法)。 例如:

 using (WebClient webClient = new WebClient()) { byte [] data = webClient.DownloadData("https://fbcdn-sphotos-ha.akamaihd.net/hphotos-ak-xpf1/v/t34.0-12/10555140_10201501435212873_1318258071_n.jpg?oh=97ebc03895b7acee9aebbde7d6b002bf&oe=53C9ABB0&__gda__=1405685729_110e04e71d9"); using (MemoryStream mem = new MemoryStream(data)) { using (var yourImage = Image.FromStream(mem)) { // If you want it as Png yourImage.Save("path_to_your_file.png", ImageFormat.Png) ; // If you want it as Jpeg yourImage.Save("path_to_your_file.jpg", ImageFormat.Jpeg) ; } } } 

注意:如果下载的内容不是已知的图像types,则可能由Image.FromStream引发ArgumentException。

在MSDN上检查这个参考find所有可用的格式。 这里是对WebClientBitmap参考。

.net框架允许PictureBox控件从url加载图片

并保存图像在Laod完成事件

 protected void LoadImage() { pictureBox1.ImageLocation = "PROXY_URL;} void pictureBox1_LoadCompleted(object sender, AsyncCompletedEventArgs e) { pictureBox1.Image.Save(destination); }