使用图片

除了直接在 canvas 中绘制各种图形,快应用还支持使用图片。

图像对象

为了能够在 canvas 中使用图片,需要使用图像对象来加载图片。

  1. const img = new Image() //新建图像对象

图片加载

修改图像对象的 src 属性,即可启动图片加载。

src 既可以使用 URI 来加载本地图片,也使用 URL 加载网络图片。

  1. const img = new Image() //新建图像对象
  2. img.src = '/common/logo.png' //加载本地图片
  3. img.src = 'https://www.quickapp.cn/assets/images/home/logo.png' //加载网络图片
  4. //加载成功的回调
  5. img.onload = () => {
  6. console.log('图片加载完成')
  7. }
  8. //加载失败的回调
  9. img.onerror = () => {
  10. console.log('图片加载失败')
  11. }

绘制图片

图片加载成功之后,就可以使用 drawImage 在画布中进行图片绘制了。

为避免图片未加载完成或加载失败导致填充错误,建议在加载成功的回调中进行图片填充操作。

  1. img.onload = () => {
  2. ctx.drawImage(img, 0, 0)
  3. }

使用 drawImage 绘制图片也有 3 种不同的基本形式,通过不同的参数来控制。

基础

  1. drawImage(image, x, y)

其中 image 是加载的图像对象,x 和 y 是其在目标 canvas 里的起始坐标。

这种方法会将图片原封不动的绘制在画布上,是最基本的绘制方法。

缩放

  1. drawImage(image, x, y, width, height)

相对基础方法,多了两个 widthheight 参数,指定了绘制的尺寸。

这种方法会将图片缩放成指定的尺寸后,绘制在画布上。

切片

  1. drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)

其中 image 与基础方法一样,是加载的图像对象。

其它 8 个参数可以参照下方的图解,前 4 个是定义图源的切片位置和尺寸,后 4 个则是定义切片的目标绘制位置和尺寸。

切片绘图

在填充和描边绘制中使用图片

图片不仅仅可以直接绘制在画布中,还可以将图片像渐变色一样,作为绘制图形的样式,在填充和描边绘制中使用。

首先,需要通过 createPattern 创建图元对象,然后就可以将图元对象作为样式用在图形的绘制中了。

同样,为避免图片未加载完成或加载失败导致填充错误,建议在加载成功的回调中进行操作。

  1. img.onload = () => {
  2. const imgPat = ctx.createPattern(img, 'repeat') //创建图元对象
  3. const p = Math.PI
  4. //填充绘制一个圆,使用图片作为填充元素
  5. ctx.beginPath()
  6. ctx.moveTo(50, 30)
  7. ctx.arc(100, 100, 60, 0, p * 2, false)
  8. ctx.fillStyle = imgPat
  9. ctx.fill()
  10. //描边绘制一个圆,使用图片作为描边元素
  11. ctx.moveTo(100, 30)
  12. ctx.beginPath()
  13. ctx.arc(250, 250, 50, 0, p * 2, false)
  14. ctx.strokeStyle = imgPat
  15. ctx.lineWidth = 30
  16. ctx.stroke()
  17. }