一、简介
HTML 是一种标记语言,用于描述网页的结构和内容。然而,HTML 本身并不具备绘制图形的能力。为了实现将 HTML 内容绘制成图片,我们需要借助其他工具或库。
二、方案
使用图形库,如 Canvas 或 SVG。Canvas 是 HTML5 引入的一种用于绘制 2D 图形的 API,而 SVG 是一种用于描述 2D 图形的 XML 语言。通过使用 Canvas 或 SVG,我们可以在网页上绘制图形,并将其转换为图片。
注意:
- 涉及到保存图片的,站内采用原生通讯桥的方式进行通讯通过 App 进行图片的分享和保存,站外统一采用长按保存的方式进行保存图片
- 长按保存图片必须要使用
<img>标签来展示图片,并且不能有存在设置 css 属性为:-webkit-touch-callout: none;
三、实现
- 通过图形库将 HTML 转换成图片的库社区十分的丰富,这里提供一种较为稳定,经过验证的
"html2canvas": "1.0.0-alpha.12"第三方库,但这里仅做推荐,有更好的依旧可选择更好的,以下通过一小段实现逻辑案例进行展示:
<template>
<div class="hide-shared" ref="shareDialogRef">
<img class="shard-bg" :src="shardBg" alt="shard background" />
<div :class="shareQrcodeClass">
<div :class="{ 'share-code-right-qrcode': true, 'is-sa': isSaLang }" ref="qrCodeRef"></div>
</div>
</div>
</template>
<script>
const html2canvas = await this.getHtml2canvas();
const canvas = await html2canvas.default(shareDialogRef, {
backgroundColor: null,
useCORS: true,
logging: false,
scale: 3,
dpi: window?.devicePixelRatio,
});
// --------- 图片生成成功 ---------
const base64 = canvas.toDataURL();
</script>
这里注意的是需要监听 shareDialogRef 确定绘制完成后再进行绘图,采用监听方式而非延迟方式。
四、优化:
- 绘图操作应该在页面加载的时候就开始
- 绘图内容中包含的 img 应该先进行预加载
- 状态变更导致绘制内容变化应该采用 v-show 而非是 v-if
五、总结
在此总结了一下将 HTML 绘制成图片进行分享的经验 ~