Scarica immagine in C#

Muhammad Maisam Abbas 12 ottobre 2023
  1. Scarica l’immagine con la classe WebClient in C#
  2. Scarica l’immagine senza conoscere il formato con la classe Bitmap in C#
  3. Scarica l’immagine senza conoscere il formato con la funzione Image.FromStream() in C#
Scarica immagine in C#

Questo tutorial discuterà i metodi per scaricare un’immagine in C#.

Scarica l’immagine con la classe WebClient in C#

La WebClient class fornisce funzionalità per inviare e ricevere dati da un URL in C#. La funzione WebClient.DownloadFile(url, path) scarica un file da un particolare URL url e lo salva nel path. Possiamo usare la funzione WebClient.DownloadFile() per scaricare un’immagine da un URL.

using System;
using System.Net;
using System.Runtime.InteropServices;

namespace download_image {
  class Program {
    static void download() {
      string url =
          "https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Breathe-face-smile.svg/1200px-Breathe-face-smile.svg.png";
      using (WebClient client = new WebClient()) {
        client.DownloadFile(new Uri(url), "Image.png");
      }
    }
    static void Main(string[] args) {
      try {
        download();
      } catch (ExternalException e) {
        Console.WriteLine(e.Message);

      } catch (ArgumentNullException e) {
        Console.WriteLine(e.Message);
      }
    }
  }
}

Nel codice sopra, abbiamo scaricato un’immagine dall’URL url e l’abbiamo salvata nel percorso Image.png con la funzione client.DownloadFile(new Uri(url), "Image.png") in C#.

Scarica l’immagine senza conoscere il formato con la classe Bitmap in C#

Nell’esempio sopra, dobbiamo conoscere il formato del file immagine da scaricare; quindi, possiamo scaricarlo dall’URL e salvarlo. Ma, se non conosciamo il formato del file immagine, possiamo usare la classe Bitmap. La classe Bitmap fornisce metodi per lavorare con le immagini in C#. Questo metodo scaricherà e salverà i file in tutti i formati che la classe Bitmap può gestire. La funzione Bitmap.Save(path, format) scrive il contenuto della nostra bitmap in un file nel path con il formato format. La ImageFormat class può essere utilizzata all’interno della funzione Bitmap.Save() per specificare manualmente il formato dell’immagine da salvare. Il seguente esempio di codice ci mostra come possiamo scaricare un’immagine da un URL senza conoscere il formato con la funzione Bitmap.Save() in C#.

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;

namespace download_image {
  class Program {
    static void SaveImage() {
      string url =
          "https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Breathe-face-smile.svg/1200px-Breathe-face-smile.svg.png";
      WebClient client = new WebClient();
      Stream stream = client.OpenRead(url);
      Bitmap bitmap = new Bitmap(stream);

      if (bitmap != null) {
        bitmap.Save("Image1.png", ImageFormat.Png);
      }

      stream.Flush();
      stream.Close();
      client.Dispose();
    }
    static void Main(string[] args) {
      try {
        SaveImage();
      } catch (ExternalException e) {
        Console.WriteLine(e.Message);

      } catch (ArgumentNullException e) {
        Console.WriteLine(e.Message);
      }
    }
  }
}

Abbiamo definito la funzione SaveImage() che scarica e salva un’immagine. Abbiamo usato la classe WebClient per fare richieste web al url. Abbiamo usato la classe Stream per leggere i dati dalla funzione client.OpenRead(url). Abbiamo usato la classe Bitmap per convertire il flusso in un formato bitmap. Abbiamo quindi utilizzato la funzione bitmap.Save() per salvare la bitmap nel percorso Image1.png con il formato ImageFormat.Png.

Scarica l’immagine senza conoscere il formato con la funzione Image.FromStream() in C#

Possiamo anche fare la stessa cosa dell’esempio precedente con la funzione Image.FromStream() in C#. La funzione Image.FromStream() legge un file immagine da un flusso di memoria in C#. Per questo, possiamo prima scaricare tutti i dati dal nostro URL su un array di byte. Quindi, possiamo caricare quell’array in un oggetto della classe MemoryStream. Possiamo quindi usare la funzione Image.FromStream() per leggere un’immagine dall’oggetto della classe MemoryStream. Possiamo quindi salvare questa immagine in un percorso in un formato particolare con la funzione Image.Save(path, format) in C#. Il seguente esempio di codice ci mostra come scaricare un’immagine da un URL senza conoscerne la formattazione con la funzione Image.FromStream() in C#.

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;

namespace download_image {
  class Program {
    static void SaveImage() {
      string url =
          "https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Breathe-face-smile.svg/1200px-Breathe-face-smile.svg.png";
      using (WebClient webClient = new WebClient()) {
        byte[] data = webClient.DownloadData(url);

        using (MemoryStream mem = new MemoryStream(data)) {
          using (var yourImage = Image.FromStream(mem)) {
            yourImage.Save("Image2.png", ImageFormat.Png);
          }
        }
      }
    }
    static void Main(string[] args) {
      try {
        SaveImage();
      } catch (ExternalException e) {
        Console.WriteLine(e.Message);

      } catch (ArgumentNullException e) {
        Console.WriteLine(e.Message);
      }
    }
  }
}

Abbiamo definito la funzione SaveImage() che scarica e salva un’immagine. Abbiamo utilizzato l’array di byte data per memorizzare i dati restituiti dalla funzione webClient.DownloadData(url). Abbiamo quindi inizializzato un’istanza mem della classe MemoryStream con data. Quindi leggiamo l’immagine yourImage dal mem con la funzione Image.FromStream(mem). Alla fine, abbiamo salvato l’immagine yourImage nel percorso Image2.png con la formattazione ImageFormat.Png utilizzando la funzione yourImage.Save("Image2.png", ImageFormat.Png).

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Articolo correlato - Csharp Image