1. 理解朋友圈图片生成的原理
在小程序中,我们想要生成一个类似朋友圈的图片,主要是通过将前端页面转化为图片进行实现。这里的核心技术就是canvas绘图技术,通过canvas对前端页面进行绘制,最终得到我们想要的图片。
1.1 canvas的基本知识
Canvas 是一个可以使用 JavaScript 中的函数绘制图形的 HTML 元素。Canvas 元素只是由不同的 JavaScript 函数创建的HTML元素。它可以被绘制在屏幕上,也可以通过 JavaScript 编程来动态的更新。Canvas元素有以下属性:
<canvas id="myCanvas" width="200" height="100"></canvas>
其中,id为元素的标识符;width和height为元素的尺寸
1.2 canvas的绘图环境
Canvas 有两种绘制路径:路径函数和像素函数。路径函数用于绘制线条、弧形、多边形等等各种形状。像素函数用于像素级图像处理,包括透明度、颜色、大小等。
getContext("2d") 是内建的 HTML5 对象,在canvas元素获得焦点时被创建。getContext("2d") 对象是 JavaScript 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像等方法。该对象在空白 canvas 区域创建了一个 x轴从左到右、y轴从上到下的二维网格画布。
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.fillStyle="#FF0000";
ctx.fillRect(0,0,150,75);
以上代码使用canvas绘制一个红色的矩形
2. 实现思路
理解了canvas的基本知识和绘图环境后,我们开始思考如何用canvas来实现朋友圈图片的生成。
大致的思路如下:
将前端页面截图(screenshot)
将截图绘制到canvas上(canvas.drawImage())
在canvas上绘制其他元素,比如头像、文字、时间等
将canvas转化为图片(canvas.toDataURL())
3. 实现细节
3.1 截图
截图使用的是html2canvas库。该库的作用是将html中的元素截取为图片,代码如下:
html2canvas(document.querySelector('.screenshot')).then(canvas => {
document.body.appendChild(canvas)
})
其中,screenshot为需要截取的元素的class或id名称,document.body.appendChild(canvas)是将截图添加到body中
3.2 绘制到canvas上
将截图绘制到canvas上使用canvas.drawImage()方法,该方法用于将图像、画布、视频绘制到画布上
var img = new Image();
img.src = BASE64;
img.onload = function(){
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
}
其中,BASE64为截图的base64编码
3.3 绘制其他元素
canvas还提供了各种绘制元素的方法,比如绘制文本ctx.fillText(),绘制圆形ctx.arc()等
绘制头像:
var avatarImg = new Image();
avatarImg.src = avatar;
avatarImg.onload = function() {
ctx.drawImage(avatarImg, x, y, radius*2, radius*2);
}
其中,avatar为头像地址,x和y为图片在canvas上的坐标,radius*2为图片的宽高
3.4 将canvas转化为图片
将canvas转化为图片使用canvas.toDataURL()方法,该方法返回的是base64编码的图片数据,需要转化为图片的链接方便进行保存和分享
var imgData = canvas.toDataURL("image/png");
4. 结语
以上就是朋友圈图片生成的技术实现方法。通过canvas的绘图环境,我们可以实现各种各样的图形和文字的绘制。在实际使用中,我们还可以通过调整canvas的尺寸,实现长图或者正方形图片的生成。