Unduh Gambar dari URL C#

Visual sangat membantu untuk memahami berbagai hal dengan lebih jelas, lebih cepat, dan lebih mudah. Dengan demikian, gambar biasanya digunakan melalui web karena banyak alasan. Terkadang Anda mungkin perlu mengunduh gambar dari halaman web yang berbeda. Oleh karena itu, artikel ini membahas cara mengunduh gambar dari URL di C#. Ini juga berisi beberapa sumber unduhan sehingga Anda dapat dengan mudah menguji pengunduhan gambar dengan jenis proyek plug-and-play.

Instalasi C# Web Scraping API untuk Mengunduh Gambar

Aspose.HTML for .NET adalah pustaka C# pengikisan web yang dapat digunakan untuk mengekstrak data atau informasi dari halaman web atau file HTML. Anda dapat dengan mudah mengonfigurasi API dengan mengunduh file DLL referensi dari bagian Rilis Baru, atau menggunakan perintah penginstalan NuGet berikut:

PM> Install-Package Aspose.Html

Unduh Gambar dari URL di C#

Anda dapat dengan mudah mengunduh gambar dari URL dalam C# dengan panggilan API sederhana. Demikian pula, Anda dapat memproses HTML dan format halaman web lainnya untuk mengunduh gambar. Anda dapat mengumpulkan semua gambar dari elemen IMG atau OBJECT dari dokumen input dan menuliskannya ke folder yang ditentukan dengan nama unik. Selain itu, ini mendukung penyimpanan gambar PNG, JPG, dan SVG. Silakan ikuti langkah-langkah di bawah ini untuk mengunduh gambar dari URL di C#:

  • Buat kelas Gambar untuk bekerja dengan URL, MimeType, dan Konten.
  • Ambil gambar dari elemen IMG atau OBJECT.
  • Tulis gambar ke disk menggunakan kelas ImageSaver.

Contoh kode berikut menunjukkan seluruh proses untuk mengunduh gambar secara terprogram dalam C#:

namespace DownloadImage
{
    class Program
    {
        static void Main(string[] args)
        {
            // Anda bisa mendapatkan Lisensi Evaluasi GRATIS di https://purchase.aspose.com/temporary-license
            Aspose.Html.License license = new License();
            license.SetLicense("License.lic");

            // Tetapkan jalur untuk membaca atau menulis data pada disk
            string dataDir = @"D:\Image Web Scraping\";

            // Tentukan jalur untuk membaca file input dari disk lokal
            //menggunakan var doc = new HTMLDocument(dataDir + "Sample.html");

            // Tentukan URL untuk Mengunduh Gambar dari URL di C#
            using var doc = new HTMLDocument("YOUR URL GOES HERE");            
            var grabber = new ImageGrabber();
            var saver = new ImageSaver(dataDir);
            saver.Save(grabber.GrabFrom(doc));
        }
    }
}
namespace DownloadImage
{
    public class Image
    {
        public Image(ResponseMessage response)
        {
            Content = response.Content.ReadAsByteArray();
            Url = response.Request.RequestUri;
            MimeType = response.Headers.ContentType.MediaType;
        }

        public Url Url { get; }
        public MimeType MimeType { get; }
        public byte[] Content { get; }
    }
}
namespace DownloadImage
{
    class ImageGrabber
    {
        private readonly IList<IElementGrabber> _elementGrabbers = new List<IElementGrabber>();

        public ImageGrabber()
        {
            _elementGrabbers.Add(new ImgElementGrabber());
            _elementGrabbers.Add(new ObjectElementGrabber());
        }

        public IEnumerable<Image> GrabFrom(Document document)
        {
            return _elementGrabbers.SelectMany(collector => collector.Collect(document));
        }

        private interface IElementGrabber
        {
            public IEnumerable<Image> Collect(Document document);
        }

        private class ImgElementGrabber : IElementGrabber
        {
            public IEnumerable<Image> Collect(Document document)
            {
                var images = document.QuerySelectorAll("img");

                foreach (Element image in images)
                {
                    if (!image.HasAttribute("src")) continue;
                    var src = image.GetAttribute("src");
                    using var response = document.Context.Network.Send(new RequestMessage(new Url(src, document.BaseURI)));

                    if (response.IsSuccess)
                    {
                        yield return new Image(response);
                    }
                }
            }
        }

        private class ObjectElementGrabber : IElementGrabber
        {
            public IEnumerable<Image> Collect(Document document)
            {
                var objects = document.QuerySelectorAll("object");

                foreach (Element obj in objects)
                {
                    if (!obj.HasAttribute("data")) continue;
                    var data = obj.GetAttribute("data");
                    using var response = document.Context.Network.Send(new RequestMessage(new Url(data, document.BaseURI)));

                    if (response.Headers.ContentType.MediaType.Type.StartsWith("image") && response.IsSuccess)
                    {
                        yield return new Image(response);
                    }
                }
            }
        }
    }
}
namespace DownloadImage
{
    public class ImageSaver
    {
        private readonly string _folderPath;

        public ImageSaver(string folderPath)
        {
            _folderPath = folderPath;
        }

        public void Save(IEnumerable<Image> images)
        {
            foreach (var image in images)
            {
                Save(image);
            }
        }

        public void Save(Image image)
        {
            if (!Directory.Exists(_folderPath)) Directory.CreateDirectory(_folderPath);

            var fileName = Path.GetFileNameWithoutExtension(image.Url.Pathname);
            var extension = Path.GetExtension(image.Url.Pathname);

            if (string.IsNullOrEmpty(extension))
            {
                extension = image.MimeType.Type switch
                {
                    "image/jpeg" => ".jpeg",
                    "image/png" => ".png",
                    "image/svg+xml" => ".svg",
                    _ => ".png"
                };
            }

            if (string.IsNullOrEmpty(fileName))
            {
                fileName = "image";
            }

            var i = 0;
            var fileNameWithExtension = fileName + extension;
            string savedImagePath;

            while (File.Exists(savedImagePath = Path.Combine(_folderPath, fileNameWithExtension)))
            {
                fileNameWithExtension = $"{fileName} ({i++}){extension}";
            }

            File.WriteAllBytes(savedImagePath, image.Content);
        }
    }
}

Unduh Proyek Contoh Kerja

Anda dapat menemukan aplikasi demo C# plug-and-play dengan mengkloning proyek contoh kerja dari GitHub Repository atau mengaksesnya sebagai file ZIP dari Google Drive.

Dapatkan Lisensi Evaluasi Gratis

Anda dapat menghindari batasan batasan evaluasi dengan meminta lisensi sementara gratis.

Kesimpulan

Pada artikel ini, Anda telah mempelajari cara mengunduh gambar dari URL atau di C#. Demikian pula, Anda dapat mengunduh gambar dari halaman HTML sesuai kebutuhan Anda karena API dapat menyelesaikan jalur relatif ke gambar. Ini memungkinkan Anda untuk menyimpan gambar format JPG, PNG, atau SVG dengan nama unik. Selanjutnya, Anda dapat menjelajahi fitur pengikisan web lainnya dengan mengunjungi bagian dokumentasi. Jika Anda perlu mendiskusikan pertanyaan atau masalah apa pun, silakan kirim email kepada kami di forum.

Lihat juga

Buat Pengikis Web di C#