Читать веб-страницу со всеми изображениями в формате Base64-Embedded - PullRequest
1 голос
/ 04 октября 2011

В моем сценарии я хочу загружать HTML страницы (любой страницы в Интернете) программно, но также я хочу, чтобы все изображения в HTML были в base64 встроенном формате (без ссылки)

Другими словами, вместо:

<img src='/images/delete.gif' />

Я хочу, чтобы загруженный HTML выглядел следующим образом:

<img src="data:image/gif;base64,R0lGODl..." />

Таким образом, мне не нужно идтичерез процесс хранения всех изображений в каталогах и т. д. и т. д.

Кто-нибудь из вас имеет представление о том, как это можно сделать?Или какой-нибудь плагин, чтобы сделать это эффективно?

Ответы [ 3 ]

6 голосов
/ 04 октября 2011

Ну, вам нужно:

  • Скачать оригинальный HTML
  • Найдите каждый элемент img в HTML (например, с помощью пакета agility HTML ) и для каждого:
    • Если он уже использует URL-адрес данных, игнорируйте его
    • В противном случае:
    • Скачать картинку
    • Кодировал его в Base64, используя Convert.ToBase64String
    • Заменить оригинальный тег img на тег base64 (либо в исходной строке, либо в представлении DOM)
  • Сохранить окончательный HTML-код на диск

Является ли какой-либо из этих шагов причиной вашей конкретной проблемы? Вы можете сделать это быстрее, загрузив изображения параллельно, но сначала я получу серийную версию.

2 голосов
/ 04 октября 2011

Вместо использования html-страницы с изображениями в виде строк в кодировке base64 в атрибуте src, вы можете использовать формат MHTML .Большинство браузеров поддерживает этот формат и встраивает все внешние ресурсы (включая изображения).

var msg = new CDO.MessageClass();
msg.MimeFormatted = true;
msg.CreateMHTMLBody("http://www.google.com", CDO.CdoMHTMLFlags.cdoSuppressNone, "", "");
var stream = msg.GetStream();
var mhtml = stream.ReadText(stream.Size);
0 голосов
/ 04 октября 2011

Используйте регулярное выражение (регулярное выражение), чтобы извлечь URL-адреса из тегов img, преобразовать их в абсолютные URL-адреса с помощью класса Uri, а затем использовать WebClient для загрузки целевых изображений. После этого это просто случай использования Convert.ToBase64String для создания Base64.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...