Как сохранить HTML-страницы в виде картинок?
- Перепишите DOM на холст, а затем используйте метод холста toDataURL для вывода DOM в виде URL-адреса данных, содержащего изображение.
- Реализовано с помощью HtmlCanvas2.
- Реализовано с помощью rasterizeHTML.js.
Анализ преимуществ и недостатков:
(1) Метод перезаписи DOM на холст: это эквивалентно полной перезаписи стиля макета всей страницы, что увеличивает рабочую нагрузку. Из-за концепции объекта, которая недоступна в холсте, непросто реконструировать страницы с богатыми элементами и сложными макетами. Перезапись всех элементов DOM на холст создает некоторые трудности. Например: Трудно поддерживать отзывчивость.
(2) Способ использования HtmlCanvas: просто вызовите метод html2canvas и установите элементы конфигурации. Все изображения, используемые сценарием, должны находиться в одном и том же источнике, если на странице есть другие элементы холста, которые были испорчены контентом из разных источников и больше не могут быть прочитаны html2canvas.
(3) Используйте rasterizeHTML.js для достижения: существует много ограничений, в настоящее время поддерживаются только 3 типа целевых форматов, которые можно преобразовать в холст: URL-адрес страницы, строка html и объект документа.
Принцип скриншота скрипта html2canvas
Скрипты позволяют делать скриншоты или части веб-страниц прямо в браузере пользователя. Скриншоты основаны на модели DOM, поэтому они могут быть не на 100 % точными для реального представления, поскольку они не делают фактический снимок экрана, а создают его на основе информации, доступной на странице. На самом деле он не делает скриншот страницы, а строит представление страницы на основе свойств, считанных из DOM. Следовательно, он может правильно описать только те свойства, которые понимает, а это означает, что многие свойства CSS не работают.
Как установить и использовать html2canvas?
Установитьnpm install html2canvas
представлятьimport html2canvas from ‘html2canvas’;
(1) параметры html2canvas
имя | По умолчанию | описывать |
---|---|---|
async | true | Следует ли анализировать и отображать элементы асинхронно |
allowTaint | false | Разрешить ли загрязнять холст исходным изображением |
backgroundColor | #ffffff | Цвет фона холста, если он не указан в DOM, установите значение null на прозрачный |
canvas | null | Существующие элементы холста, используемые в качестве основы для рисования |
foreignObjectRendering | false | Следует ли использовать ForeignObject для отображения постоянного |
imageTimeout | 15000 | Тайм-аут для загрузки изображения (в миллисекундах, установите 0, чтобы отключить тайм-аут) |
ignoreElements | (element)=>false | Функция предиката для удаления совпадающих элементов из рендеринга |
logging | true | Включить ведение журнала для отладки |
onclone | Функция обратного вызова, вызываемая при отображении клонированного документа, может использоваться для изменения того, что будет отображаться, не затрагивая исходный исходный документ. | |
proxy | null | URL-адрес прокси для загрузки изображений из разных источников. Если оставить поле пустым, кросс-оригинальные изображения загружаться не будут. |
removeContainer | true | Следует ли очищать клонированные элементы DOM, которые html2canvas создаст временно |
scale | window.devicePixelRatio | Масштаб, используемый для рендеринга, по умолчанию соответствует соотношению пикселей устройства браузера. |
useCORS | false | Используется для указания, разрешать ли доступ к междоменным изображениям. |
width | element width | ширина холста |
height | element height | настройка высоты холста |
x | element x-offset | обрезать холст x координата |
y | element y-offset | обрезать холст по координате y |
scrollX | element scrollX | Позиция x-scroll для использования при рендеринге элемента (например, если элемент использует position: fixed ) |
scrollY | element scrollY | Позиция прокрутки y для использования при рендеринге элемента (например, если элемент использует position: fixed ) |
windowWidth | Window.innerWidth | Ширина окна, используемая при рендеринге элемента, это может повлиять на такие вещи, как медиа-запросы. |
windowHeight | Window.innerHeght | Высота окна, используемая при раскрашивании Element , что может повлиять на такие вещи, как медиа-запросы. |
taintTest | true | Протестируйте изображение перед рендерингом |
(2) Как использовать html2canvas
- Первый шаг: реализовать первый шаг сохранения в виде изображения: преобразовать html в холст
На основе html2canvas.js элемент может отображаться как холст, а затем объект Promise передаст захваченное изображение в параметр холста.
html2canvas(document.body).then(function(canvas) { document.body.appendChild(canvas); });
- Шаг 2. Преобразование холста в изображение
Холст, сгенерированный на предыдущем шаге, представляет собой объект элемента холста, содержащий целевой элемент. Чтобы достичь цели сохранения изображений, вам нужно всего лишь преобразовать холст в изображение.
Метод toDataURL, основанный на собственном холсте, выводит холст как адрес изображения типа data: URI, а затем назначает адрес изображения дляАтрибута src элемента достаточно.
(3) Оптимизация четкости сгенерированных изображений
- Увеличьте свойства ширины и высоты холста в 2 раза (или задайте для них значение devicePixelRatio раз) и, наконец, установите для стиля CSS ширину и высоту холста в 1 раз больше исходного размера.
Блог woohoo.cn на.com/Regina1123/…
<canvas width="320" height="180" style="width:160px;height:90px;"></canvas>
- Изменить процентный макет на макет пикселей
Если ширина и высота элемента изначально были заданы в процентах, измените ширину и высоту в пикселях, чтобы избежать размытия, вызванного вторичным расчетом стилей. - Отключите настройки сглаживания по умолчанию для холста.
По умолчанию сглаживание холста включено, вам нужно отключить сглаживание, чтобы добиться повышения резкости изображения (imageSmoothingEnabled).
blog.CSDN.net/with if AA/Aretti… - Установите ширину и высоту размытого элемента на исходную ширину и высоту материала, а затем масштабируйте его с помощью transform: scale. Значение масштаба здесь определяется конкретными потребностями.
.targetElem {width: 54px;height: 142px;margin-top:2px;margin-left:17px;transform: scale(0.5)}
(4) Установка междоменных картинок
- Конфигурация изображений в CDN
Включите элемент конфигурации USECORS HTML2CANVAS (USECORS: TRUE)
Если элемент конфигурации useCORS html2canvas не включен, html2canvas будет выполняться нормально и не будет сообщать об ошибке, но не будет выводить соответствующее изображение CDN. (Страница, содержащая как изображения CDN, так и локальные ресурсы изображений, была протестирована, но только локальные изображения могут отображаться нормально)