html使用canvas合并多张图片并下载

42 篇文章 0 订阅
37 篇文章 0 订阅

html使用canvas合并多张图片并下载

1. 创建canvas对象,并引入2d上下文实例

const canvas = document.createElement('canvas')
let ctx = canvas.getContext('2d');
canvas.width = 1920 // 设定canvas的宽度、高度
canvas.height = 1080

2. 创建图片对象

let img1 = new Image();
img1.src = require('../../assets/img/monitor/map-name.png');
// 监听onload 事件,待图片加载完毕后绘制到canvas上
// 计数器,用来计数是否全部加载完成
let num = 0
img1.onload = function() {
	ctx.drawImage(img1, 10, 10);
	// 假设img1是必须先加入,则其他图片在其onload函数上加载并绘制到canvas
	let img2 = new Image();
    img2.src = require('../../assets/img/monitor/map-name.png');
    let img3 = new Image();
    img3.src = require('../../assets/img/monitor/boundary.png');
    // 分别监听img2和img3的onload事件
    img1.onload = function() {
	   ctx.drawImage(img1, 10, 10);
	    num++
	    if (num === 2) { // 判断是否是最后一张,是最后一张则下载图片
	    	// 将canvas转化成URL链接,用a标签进行下载或者预览,img标签预览都可以
	        href = canvas.toDataURL();
	        const downloadElement = document.createElement('a')
	        downloadElement.href = href
	        downloadElement.target = '_blank'
	        downloadElement.download = `${name}.png`
	        document.body.appendChild(downloadElement)
	        downloadElement.click()
	        document.body.removeChild(downloadElement)
	    }
	}
	img3.onload = function() {
	    ctx.drawImage(img3, 10, 10);
	    num++
	    if (num === 2) {
	        href = canvas.toDataURL();
	        const downloadElement = document.createElement('a')
	        downloadElement.href = href
	        downloadElement.target = '_blank'
	        downloadElement.download = `${name}.png`
	        document.body.appendChild(downloadElement)
	        downloadElement.click()
	        document.body.removeChild(downloadElement)
	    }
	}
})

注:思路就是将图片按照你想要的顺序添加到canvas的指定位置,然后待全部加载完成后采用a标签下载下来,本地链接,外部链接,blob流都适用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值