在微信小程序中做分享海报, 需要绘制 canvas
,设置图片 100%
占满元素, 作为海报的背景。
文档翻一翻, canvas.drawImage()
一把梭, 呃呃呃…发现背景图片没有按照原图 100%
平铺, 而是只取了部分, 变形了
装X失败, 还是仔仔细细看看文档
drawImage(image sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) 从 1.9.0 起支持
先来分析以下这些参数的含义吧~ 和 h5
中的参数是一致的
sx
源图像的矩形选择框的左上角 x
坐标sy
源图像的矩形选择框的左上角 y
坐标sWidth
源图像的矩形选择框的宽度sHeight
源图像的矩形选择框的高度dx
图像的左上角在目标 canvas
上 x
轴的位置dy
图像的左上角在目标 canvas
上 y
轴的位置dWidth
在目标画布上绘制图像的宽度, 允许对绘制的图像进行缩放dHeight
在目标画布上绘制图像的高度, 允许对绘制的图像进行缩放<img id="tulip" src="/share/img/[email protected]">
<canvas id="canvas">canvas>
*{
margin: 0;
padding: 0;
}
#canvas{
width: 100%;
height: 100vh;
}
#tulip{
width: 100%;
}
document.getElementById("canvas");
var ctx=c.getContext("2d");
var img=document.getElementById("tulip");
// (image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
// 1125为图片的原始宽度, 2001为图片的原始高度; iphone6模式
ctx.drawImage(img, 0, 0, 1125, 2001, 0, 0, 375, 667);
再来看一下翻车现场
不看不知道, 一看吓一跳
canvas
元素是 可替换元素
, 有默认的宽高属性(此属性与 css
样式中的 width
和 height
不同), 默认 300px*150px
canvas
的绘制宽高取决于它的宽高属性, 与 css
样式中的宽高无关再过来看看我们的问题
canvas
声明宽和高, 所以绘制区域的大小默认是 300px*150px
1125px*2001px
的内容绘制在 300px*150px
的区域中, 然后将它的 css
展示大小设置 375px*667px
给 canvas
显式地设置宽高属性, 根据需要, 可以设置为 屏幕宽高 * 屏幕像素比
, 让其在高清屏上更清晰
在微信小程序中, canvas
没有宽高属性, 所以直接设置 css
样式中的 width
和 height
是可以的
var c=document.getElementById("canvas");
c.setAttribute('width', 375*2);
c.setAttribute('height', 667*2);
var ctx=c.getContext("2d");
var img=document.getElementById("tulip");
// (image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
ctx.drawImage(img, 0, 0, 1125, 2001, 0, 0, 375*2, 667*2);
嘘寒问暖 不如打笔巨款~