web-dev-qa-db-ja.com

URLから画像をダウンロードする方法

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
79
Ifwat Ibrahim

簡単に次の方法を使用できます。

  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には形式の拡張子は必要ありません

画像の形式(.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
 }

99
Charlie

画像形式を知っているかどうかに応じて、次の方法で実行できます。

画像形式を知っているファイルに画像をダウンロードする

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

画像形式を知らずに画像をファイルにダウンロードする

Image.FromStream を使用して、あらゆる種類の通常のビットマップ(jpg、png、bmp、gif、...)をロードできます。ファイルタイプを自動的に検出し、URLを確認する必要さえありません。拡張(これはあまり良い方法ではありません)。例えば:

using (WebClient webClient = new WebClient()) 
{
    byte [] data = webClient.DownloadData("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_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) ; 
       }
   } 

}

注:ダウンロードしたコンテンツが既知の画像タイプでない場合、Image.FromStreamによってArgumentExceptionがスローされる場合があります。

MSDNのこのリファレンス をチェックして、利用可能なすべての形式を見つけます。 WebClient および Bitmap への参照です。

65
Perfect28

画像をファイルに保存せずにダウンロードしたい場合:

Image DownloadImage(string fromUrl)
{
    using (System.Net.WebClient webClient = new System.Net.WebClient())
    {
        using (Stream stream = webClient.OpenRead(fromUrl))
        {
            return Image.FromStream(stream);
        }
    }
}
9
Brian Cryer

.net Frameworkでは、PictureBoxコントロールがURLから画像をロードできます

ロード完了イベントで画像を保存

protected void LoadImage() {
 pictureBox1.ImageLocation = "PROXY_URL;}

void pictureBox1_LoadCompleted(object sender, AsyncCompletedEventArgs e) {
   pictureBox1.Image.Save(destination); }
4
Ali Humayun

これを試してみてください100%間違いなく動作します

これをコントローラーファイルに書き込む

public class TenantCustomizationController : RecruitControllerBase

    //enter code here

[AllowAnonymous]
        [HttpGet]
        public async Task<FileStreamResult> GetLogoImage(string logoimage)
        {
            string str = "" ;
            var filePath = Server.MapPath("~/App_Data/" + AbpSession.TenantId.Value);
            // DirectoryInfo dir = new DirectoryInfo(filePath);
            string[] filePaths = Directory.GetFiles(@filePath, "*.*");
            foreach (var fileTemp in filePaths)
            {
                  str= fileTemp.ToString();
            }
                return File(new MemoryStream(System.IO.File.ReadAllBytes(str)), System.Web.MimeMapping.GetMimeMapping(str), Path.GetFileName(str));
        }
        //09/07/2018

Here Is my View


<div><a href="/TenantCustomization/GetLogoImage?Type=Logo" target="_blank">@L("DownloadBrowseLogo")</a></div>
0
Chandan Kumar