draw-image.js 1.5 KB

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