Как конвертировать HTML в JPEG/PNG/WebP

Как программным способом преобразовать веб-страницу в графический растровый файл.

«Ха-ха, — скажете вы, — нет ничего проще. Открываем страницу в браузере, жмем Print Screen и вставляем изображение в графическом редакторе. Вуаля!» Однако:

  1. Эту операцию иногда хотелось бы автоматически повторить несколько раз.
  2. На полученный результат влияет множество факторов:
    1. Текущий размер окна браузера.
    2. Разрешение вашего монитора. Например, он FHD, а вам понадобилась картинка в 4K.
    3. Масштабирование в системе и в браузере.
  3. Иногда хотелось бы задать размер окна браузера с точностью до пиксела. Попробуйте это сделать с помощью мышки и вы проклянете все на свете.
  4. Иногда хотелось бы иметь прозрачный фон в полученном графическом файле.

Достаточно? Итак,

  1. Устанавливаем Google Chrome, если он у вас еще не стоит. Поскольку возможность сохранения графических файлов появилась только в 59-й версии, может быть придется обновить свой Chrome до более позднего.
  2. Находим исполняемый файл Chrome. В моем случае его путь «C:\Program Files\Google\Chrome\Application\chrome.exe». Как вы могли понять, он в 64-бит варианте, но все также отлично работало и раньше, когда он был 32-битным «C:\Program Files (x86)\Google\Chrome\Application\chrome.exe».
  3. Создаем рабочий каталог, полное имя которого не содержит специальных символов и пробелов. У меня он будет «C:\Temp». Такие же имена нужно использовать для всех остальных файлов в этой задаче.

Пример 1: Конвертировать веб-страницу

Получить скриншот той самой страницы, которую вы сейчас просматриваете, в разрешении 4K:
"C:\Program Files\Google\Chrome\Application\chrome.exe" --headless --disable-gpu --window-size=3840,2160 --screenshot="C:\Temp\software-html-to-graphic.png" "https://sjohnru.wordpress.com/software/software-html-to-graphic/"
Или та же самая командная строка в формате командного файла Windows, который позволит нам использовать перенос строк.
"C:\Program Files\Google\Chrome\Application\chrome.exe" ^
--headless ^
--disable-gpu ^
--window-size=3840,2160 ^
--screenshot="C:\Temp\software-html-to-graphic.png" ^
"https://sjohnru.wordpress.com/software/software-html-to-graphic/"
Что это все означает?
  • --headless — дает возможность выполнить команду, а не просто открыть браузер.
  • --disable-gpu — магическое заклинание. С ним точно все работает, без него может и не работать.
  • --window-size=3840,2160 — очевидно.
  • --screenshot="C:\Temp\software-html-to-graphic.png" — куда сохранить результирующий файл. Обратите внимание, что всегда задается полный путь. Если вы оставите только имя файла без указания каталога, то Chrome попытается сохранить его в свой инсталляционный каталог, где у него нет прав на запись, в результате он грохнется. Из графических форматов поддерживаются по крайней мере JPEG, PNG и WebP.
  • "https://sjohnru.wordpress.com/software/software-html-to-graphic/" — просто скопируйте сюда URL из строки вашего браузера.

Пример 2: Конвертировать HTML файл

Создаем текстовый файл с следующим содержимым:
<!DOCTYPE html>
<html>
<head>
<style type='text/css'>
::-webkit-scrollbar { display: none; }
</style>
</head>
<body>
Hello, world.
</body>
</html>
Сохраняем его как «C:\Temp\hello-world.html » и выполняем команду:
"C:\Program Files\Google\Chrome\Application\chrome.exe" ^
--headless ^
--disable-gpu ^
--window-size=320,240 ^
--screenshot="C:\Temp\hello-world.png" ^
--default-background-color=0 ^
"file:///C:/Temp/hello-world.html"
  • ::-webkit-scrollbar { display: none; } — запретить показывать полосы скроллирования.
  • --default-background-color=0 — задать прозрачный фон.
  • hello-world.png с установленным --default-background-color=0 и без него
  • "file:///C:/Temp/hello-world.html" — обратите внимание, что адрес HTML файла задается в формате URL. И путь к нему всегда должен быть полным, вам недостаточно указать только имя файла.

Marple-268

Опубликовано 2 декабря 2020 г.
Последние изменения 3 декабря 2020 г.
См. Соглашение пользователя.