JS——canvas 拼装图片、复制图片

1. 创建canvas工具类

class Canvas {
  canvas = null;
  ctx = null;

  constructor() {
    this.canvas = document.createElement('canvas');
    this.ctx = this.canvas.getContext('2d');
  }

  /* 设置画布大小 */
  setCanvasSize(w, h) {
    this.canvas.width = w;
    this.canvas.height = h;
  }

  /** 拼装图片
   * @param imgOptions[src] 图片路径
   * @param imgOptions[w] 图片宽
   * @param imgOptions[h] 图片高
   * @param imgOptions[x] 图片横向坐标
   * @param imgOptions[y] 图片纵向坐标
   */
  async assemblyPic(imgOptions) {
    for (const imgOption of imgOptions) {
      let img = new Image();
      img.src = imgOption.src;
      await new Promise((r) => {
        img.onload = () => {
          this.ctx.drawImage(
            img,
            imgOption.x || 0,
            imgOption.y || 0,
            imgOption.w || img.width,
            imgOption.h || img.height,
          );
          r(true);
        };
      });
    }
  }

  /** 复制画布到剪切板 */
  copyCanvas() {
    return new Promise((r, j) => {
      this.canvas.toBlob(async (blob) => {
        const data = [
          new ClipboardItem({
            [blob.type]: blob,
          }),
        ];
        await navigator.clipboard.write(data).then(
          () => {
            r(true);
          },
          () => {
            j(false);
          },
        );
      });
    });
  }
}

2. 使用

//引入工具类
<script src="./canvas.js"></script>

<script>
  const myCanvas = new Canvas()
  document.body.append(myCanvas.canvas)

  const url1 = `https://ns-strategy.cdn.bcebos.com/ns-strategy/upload/fc_big_pic/part-00426-872.jpg`
  const url2 = `https://img0.baidu.com/it/u=1993557595,4075530522&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500`
  //设置画布大小
  myCanvas.setCanvasSize(1000,1000)
  //拼装图片
  myCanvas.assemblyPic([
    {
      src: url1,
    }, {
      src: url2,
    },
  ])

  //复制图片
  function onCopy(){
    myCanvas.copyCanvas()
  }
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值