1. ホーム
  2. c#

[解決済み】URLから画像をダウンロードする方法

2022-02-18 05:14:33

質問

urlの末尾に画像形式がない場合、c#でurlから直接画像をダウンロードする方法はありますか?URLの例です。

https://fbcdn-sphotos-h-a.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/uncyclopedia/images/7/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(...) とほぼ同じです。これらのメソッドは、C#の文字列ではなく、ディレクトリにファイルを格納し、URiのFormat拡張子は必要ありません。

画像の形式(.png, .jpeg など)がわからない場合

public void SaveImage(string imageUrl, 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 URL---", "--- 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
}