使用canvas将多张图片截取拼接成一张图片

使用canvas将多张图片截取拼接成一张图片

业务场景

  • 最近在做一个截取视频图片并拼接的小工具,其中就有个功能需要将多张图片截取拼接成一张图片的需求

  • 在这里插入图片描述

  • 上面就是将几张图片截取拼接成一张图片的效果图

实现思路

  • 使用canvas提供的 drawImage api实现
  • api里面的参数比较复杂,在此不赘述,可以参考这篇文章 canvas的drawImage方法参数详解
  • 生成一个canvas画布,然后利用 drawImage 方法循环截取,获得我们需要的图片元素
  • 将获得的图片元素放在canvas对应的位置
  • 循环完毕后将canvas绘制的内容生成图片进行保存即可

部分源码

        mergeImgs(list, cwith = this.videoWidth, cheight = this.heigth) {
            return new Promise((resolve, reject) => {
                // 创建 canvas 节点并初始化
                const canvas = document.createElement('canvas'); 
                canvas.width = cwith; //设置 canvas 的宽度
                canvas.height = !this.special ? this.videoHeight + cheight * (list.length - 1) : cheight * list.length; // 设置canvans 的高度
                const context = canvas.getContext('2d');
                list.map((item, index) => { // 循环每张图片资源
                    const img = new Image();
                    img.src = item;
                    // 跨域
                    img.crossOrigin = 'Anonymous';
                    img.onload = () => {
                        if (!this.special && index == 0) {
                            // 截取整张图片
                            context.drawImage(img, 0, 0, cwith, this.videoHeight);
                        } else {
                            // 截取图片对应位置的画面
                            context.drawImage(
                                img,
                                0, // 开始剪切图片的 x 坐标位置
                                this.videoHeight - cheight, // 开始剪切图片的 y 坐标位置
                                cwith, // 被剪切图像的宽度
                                cheight, // 被剪切图像的高度
                                0, // 在画布上放置图像的 x 坐标位置
                                !this.special ? this.videoHeight + cheight * (index - 1) : cheight * index, // 在画布上放置图像的 y 坐标位置
                                cwith, // 被剪裁图像的宽度
                                cheight // 被剪裁图像的高度
                            );
                        }
                        if (index === list.length - 1) {
                            resolve(canvas.toDataURL('image/png')); // canvas上所有图片绘制完成后返回生成的图片
                        }
                    };
                });
            });
        },

// 调用
            this.mergeImgs(this.imageList).then((res) => {
                this.stitchImg = res;
            });

体验地址

视频截图拼接小工具

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值