Descargar imagen en C#

Muhammad Maisam Abbas 16 febrero 2024
  1. Descargar imagen con la clase WebClient en C#
  2. Descargar imagen sin conocer el formato con la clase Bitmap en C#
  3. Descargar imagen sin conocer el formato con la función Image.FromStream() en C#
Descargar imagen en C#

Este tutorial discutirá los métodos para descargar una imagen en C#.

Descargar imagen con la clase WebClient en C#

La clase WebClient proporciona funcionalidad para enviar y recibir datos desde una URL en C#. La función WebClient.DownloadFile(url, path) descarga un archivo de una URL particular url y lo guarda en la path. Podemos utilizar la función WebClient.DownloadFile() para descargar una imagen desde una 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);
      }
    }
  }
}

En el código anterior, descargamos una imagen de la URL url y la guardamos en la ruta Image.png con la función client.DownloadFile(new Uri(url), "Image.png") en C#.

Descargar imagen sin conocer el formato con la clase Bitmap en C#

En el ejemplo anterior, debemos conocer el formato del archivo de imagen que se descargará; luego, podemos descargarlo de la URL y guardarlo. Pero, si no conocemos el formato del archivo de imagen, podemos usar la clase Bitmap. La clase Bitmap proporciona métodos para trabajar con imágenes en C#. Este método descargará y guardará archivos en todos los formatos que la clase Bitmap puede manejar. La función Bitmap.Save(path, format) escribe el contenido de nuestro mapa de bits en un archivo en la path con el formato format. La clase ImageFormat se puede utilizar dentro de la función Bitmap.Save() para especificar manualmente el formato de la imagen a guardar. El siguiente ejemplo de código nos muestra cómo podemos descargar una imagen desde una URL sin conocer el formato con la función Bitmap.Save() en 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);
      }
    }
  }
}

Definimos la función SaveImage() que descarga y guarda una imagen. Usamos la clase WebClient para realizar solicitudes web a la url. Usamos la clase Stream para leer los datos de la función client.OpenRead(url). Usamos la clase Bitmap para convertir la secuencia a un formato de mapa de bits. Luego usamos la función bitmap.Save() para guardar el bitmap en la ruta Image1.png con el formato ImageFormat.Png.

Descargar imagen sin conocer el formato con la función Image.FromStream() en C#

También podemos hacer lo mismo que en el ejemplo anterior con la función Image.FromStream() en C#. La función Image.FromStream() lee un archivo de imagen de un flujo de memoria en C#. Para esto, primero podemos descargar todos los datos de nuestra URL a un array de bytes. Luego, podemos cargar esa matriz en un objeto de la clase MemoryStream. Entonces podemos usar la función Image.FromStream() para leer una imagen del objeto de la clase MemoryStream. Luego podemos guardar esta imagen en una ruta en un formato particular con la función Image.Save(path, format) en C#. El siguiente ejemplo de código nos muestra cómo descargar una imagen de una URL sin saber su formato con la función Image.FromStream() en 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);
      }
    }
  }
}

Definimos la función SaveImage() que descarga y guarda una imagen. Usamos el array de bytes data para almacenar los datos devueltos por la función webClient.DownloadData(url). Luego inicializamos una instancia mem de la clase MemoryStream con data. Luego leemos la imagen yourImage de la mem con la función Image.FromStream(mem). Al final, guardamos la imagen yourImage en la ruta Image2.png con el formato ImageFormat.Png usando la función 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

Artículo relacionado - Csharp Image