1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| import { downloadImgUrl } from '../../utils/wx-utils';
| /** 等待绘制图片原型方法 */
| export default {
| name: 'drawImage',
| init: (canvas, ctx) => {
| ctx.drawImageProto = ctx.drawImage;
| },
| handle: async (canvas, ctx, url, sx, sy, sh, sw, dx, dy, dh, dw) => {
| // 下载路径
| const path = await downloadImgUrl(url);
| // 标记当前绘画存在图片绘制
| let result = false;
| // 基本绘制方法, 如果是 fit 方式, 则传入所有参数, 不然则只传入四个参数
| const baseDrawImage = (imageResource) => {
| const isFit = typeof dx === 'number' && typeof dw === 'number';
| if (isFit) {
| ctx.drawImageProto(imageResource, sx, sy, sh, sw, dx, dy, dh, dw);
| }
| else {
| ctx.drawImageProto(imageResource, sx, sy, sh, sw);
| }
| };
| // 如果是 context 绘制方式, 则直接绘制
| if (ctx.drawType === 'context') {
| baseDrawImage(path);
| result = true;
| }
| // 如果是 type2d 绘制方式, 则等待图片绘制完毕
| if (ctx.drawType === 'type2d') {
| result = await new Promise(resolve => {
| const image = canvas.createImage();
| image.src = path;
| image.onload = () => {
| baseDrawImage(image);
| resolve(true);
| };
| image.onerror = () => resolve(false);
| });
| }
| return result;
| }
| };
|
|