URL'den Resim İndir C#

Görseller, her şeyi daha net, daha hızlı ve daha kolay anlamaya yardımcı olur. Bu nedenle, görüntüler birçok nedenden dolayı web üzerinde yaygın olarak kullanılmaktadır. Bazen farklı web sayfalarından görsel indirmeniz gerekebilir. Buna göre, bu makale C# dilinde URL’den nasıl resim indirileceğini ele almaktadır. Ayrıca, tak ve çalıştır türünde bir projeyle görüntü indirmeyi kolayca test edebilmeniz için bazı indirme kaynakları da içerir.

Görüntüyü İndirmek İçin C# Web Scraping API Kurulumu

Aspose.HTML for .NET, web sayfalarından veya HTML dosyalarından veri veya bilgi ayıklamak için kullanılabilen bir web kazıma C# kitaplığıdır. Yeni Sürümler bölümünden referans DLL dosyalarını indirerek veya aşağıdaki NuGet kurulum komutunu kullanarak API’yi kolayca yapılandırabilirsiniz:

PM> Install-Package Aspose.Html

C# URL’sinden Resim İndir

Basit API çağrılarıyla C# dilindeki URL’den görüntüyü kolayca indirebilirsiniz. Aynı şekilde, görüntüleri indirmek için HTML ve diğer web sayfası biçimlerini işleyebilirsiniz. Giriş belgesindeki IMG veya OBJECT öğelerindeki tüm resimleri toplayabilir ve bunları benzersiz adlarla belirtilen klasöre yazabilirsiniz. Ayrıca PNG, JPG ve SVG görüntülerin kaydedilmesini destekler. Resimleri URL’den C# dilinde indirmek için lütfen aşağıdaki adımları izleyin:

  • URL, MimeType ve Content ile çalışmak için bir Image sınıfı oluşturun.
  • Görüntüyü IMG veya OBJECT öğesinden alın.
  • ImageSaver sınıfını kullanarak görüntüyü diske yazın.

Aşağıdaki kod örnekleri, görüntüyü C# dilinde programlı olarak indirmek için tüm süreci göstermektedir:

namespace DownloadImage
{
    class Program
    {
        static void Main(string[] args)
        {
            // https://purchase.aspose.com/temporary-license adresinden ÜCRETSİZ Değerlendirme Lisansı alabilirsiniz.
            Aspose.Html.License license = new License();
            license.SetLicense("License.lic");

            // Diskteki verileri okumak veya yazmak için yolu ayarlayın
            string dataDir = @"D:\Image Web Scraping\";

            // Giriş dosyasını yerel diskten okumak için yol belirtin
            //var doc = new HTMLDocument(dataDir + "Sample.html");

            // C#'ta URL'den Görüntü İndirmek için URL'yi belirtin
            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);
        }
    }
}

Çalışan Bir Örnek Proje İndirin

Çalışan örnek projeyi GitHub Repository klonlayarak bir tak ve çalıştır C# demo uygulaması bulabilir veya Google Drive‘dan bir ZIP dosyası olarak erişebilirsiniz.

Ücretsiz Değerlendirme Lisansı Alın

Ücretsiz geçici lisans talep ederek değerlendirme sınırlaması kısıtlamalarından kaçınabilirsiniz.

Çözüm

Bu makalede, URL’den veya C# dilinde nasıl resim indirileceğini öğrendiniz. Benzer şekilde, API, resimlere giden göreli yolları çözebildiğinden, gereksinimlerinize göre bir HTML sayfasından resimler indirebilirsiniz. JPG, PNG veya SVG formatındaki görüntüleri benzersiz adlarla kaydetmenizi sağlar. Ayrıca, belgeler bölümünü ziyaret ederek diğer web kazıma özelliklerini keşfedebilirsiniz. Herhangi bir sorunuzu veya endişenizi tartışmanız gerekirse, lütfen forumdan bize yazın.

Ayrıca bakınız

C# dilinde bir Web Kazıyıcı oluşturun