Наглядные материалы помогают понять вещи яснее, быстрее и проще. Таким образом, изображения обычно используются в Интернете по многим причинам. Иногда вам может понадобиться загрузить изображения с разных веб-страниц. Соответственно, в этой статье рассказывается, как загрузить изображение с URL-адреса в C#. Он также содержит некоторые ресурсы для загрузки, так что вы можете просто протестировать загрузку изображений с помощью проекта типа plug-and-play.
Установка C# Web Scraping API для загрузки изображения
Aspose.HTML для .NET — это библиотека C# для парсинга веб-страниц, которую можно использовать для извлечения данных или информации с веб-страниц или HTML-файлов. Вы можете легко настроить API, загрузив эталонные DLL-файлы из раздела Новые версии или воспользовавшись следующей командой установки NuGet:
PM> Install-Package Aspose.Html
Загрузить изображение с URL-адреса в С#
Вы можете легко загрузить изображение по URL-адресу в C# с помощью простых вызовов API. Точно так же вы можете обрабатывать HTML и другие форматы веб-страниц для загрузки изображений. Вы можете собрать все картинки из элементов IMG или OBJECT из входного документа и записать их в указанную папку с уникальными именами. Кроме того, он поддерживает сохранение изображений PNG, JPG, а также SVG. Выполните следующие действия, чтобы загрузить изображения с URL-адреса в C#:
- Создайте класс Image для работы с URL, MimeType и Content.
- Получить изображение из элемента IMG или OBJECT.
- Запишите образ на диск с помощью класса ImageSaver.
Следующие примеры кода демонстрируют весь процесс программной загрузки изображения на C#:
namespace DownloadImage
{
class Program
{
static void Main(string[] args)
{
// Вы можете получить БЕСПЛАТНУЮ пробную лицензию по адресу https://purchase.aspose.com/temporary-license.
Aspose.Html.License license = new License();
license.SetLicense("License.lic");
// Установить путь для чтения или записи данных на диск
string dataDir = @"D:\Image Web Scraping\";
// Укажите путь для чтения входного файла с локального диска
//используя var doc = новый HTMLDocument (dataDir + "Sample.html");
// Укажите URL-адрес для загрузки изображения с URL-адреса в С#
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);
}
}
}
Скачать рабочий образец проекта
Вы можете найти демонстрационное приложение C# plug-and-play, клонировав рабочий пример проекта из репозитория GitHub или получив к нему доступ в виде ZIP-файла с Google Диска.
Получите бесплатную пробную лицензию
Вы можете обойти ограничения ознакомительной версии, запросив бесплатную временную лицензию.
Вывод
В этой статье вы узнали, как загрузить изображение с URL-адреса или на C#. Точно так же вы можете загружать изображения со страницы HTML в соответствии с вашими требованиями, потому что API может разрешать относительные пути к изображениям. Он позволяет сохранять изображения в формате JPG, PNG или SVG с уникальными именами. Кроме того, вы можете изучить другие функции парсинга веб-страниц, посетив раздел документация. Если вам нужно обсудить какие-либо вопросы или проблемы, напишите нам на форум.
Смотрите также
[Создайте веб-скрейпер на C#] (https://blog.aspose.com/ru/2022/05/25/web-scraping-csharp/)