js使用Canvas将多张图片合并成一张的实现代码

作者:weixin_45337170 时间:2024-05-25 15:17:59 

解决方案


function mergeImgs(list) {
const imgDom = document.createElement('img')
document.body.appendChild(imgDom)

const canvas = document.createElement('canvas')
canvas.width = 500
canvas.height = 500 * list.length
const context = canvas.getContext('2d')

list.map((item, index) => {
const img = new Image()
img.src = item
// 跨域
img.crossOrigin = 'Anonymous'

img.onload = () => {
 context.drawImage(img, 0, 500 * index, 500, 500)
 const base64 = canvas.toDataURL('image/png')
 imgDom.setAttribute('src', base64)
 // console.log(baseList)
}
})
}

const urlList = ['./img/timg%20(1).jpg', './img/timg.jpg']
mergeImgs(urlList )

代码稍微优化一下,改成公共方法


/**
* 合并多张图片,返回新的图片
* @param {Array} list 图片url数组
* @param {Number} cwith 画布宽度 默认500
* @param {Number} cheight 画布高度 默认500
*/
function mergeImgs(list, cwith = 500, cheight = 500) {
return new Promise((resolve, reject) => {
const baseList = []

const canvas = document.createElement('canvas')
canvas.width = cwith
canvas.height = cheight * list.length
const context = canvas.getContext('2d')

list.map((item, index) => {
 const img = new Image()
 img.src = item
 // 跨域
 img.crossOrigin = 'Anonymous'

img.onload = () => {
 context.drawImage(img, 0, cheight * index, cwith, cheight)
 const base64 = canvas.toDataURL('image/png')
 baseList.push(base64)

if (baseList[list.length - 1]) {
  console.log(baseList)
  // 返回新的图片
  resolve(baseList[list.length - 1])
 }
 }
})
})
}

const urlList = ['./img/timg%20(1).jpg', './img/timg.jpg']
mergeImgs(urlList ).then(base64 => {
const imgDom = document.createElement('img')
imgDom.src = base64
document.body.appendChild(imgDom)
})

效果

js使用Canvas将多张图片合并成一张的实现代码

来源:https://blog.csdn.net/weixin_45337170/article/details/115318940

标签:js,canvas,图片,合并
0
投稿

猜你喜欢

  • django中间键重定向实例方法

    2021-04-17 12:34:02
  • 解决PyCharm中光标变粗的问题

    2022-10-24 15:47:32
  • Python 窗体(tkinter)下拉列表框(Combobox)实例

    2022-04-01 02:38:07
  • 优化 SQL Server 索引的小技巧

    2012-10-07 11:00:07
  • 浅谈golang二进制bit位的常用操作

    2024-05-22 10:14:49
  • Symfony2框架创建项目与模板设置实例详解

    2023-11-20 23:36:39
  • Django实战之用户认证(初始配置)

    2022-08-17 22:15:02
  • 初学js者对javascript面向对象的认识分析

    2011-03-16 11:04:00
  • Python接单的过程记录分享

    2022-05-24 13:33:23
  • 采用python实现简单QQ单用户机器人的方法

    2022-06-26 03:28:40
  • Python绘制全球疫情变化地图的实例代码

    2022-08-27 07:06:46
  • Python 中使用 PyMySQL模块操作数据库的方法

    2024-01-26 04:23:11
  • python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例

    2021-04-26 09:11:26
  • 分享几个字体设计

    2007-10-10 13:53:00
  • 基于GORM实现CreateOrUpdate方法详解

    2024-02-14 09:18:02
  • JS数组合并push与concat区别分析

    2024-04-22 22:40:09
  • Silverlight 3 Beta出来了

    2009-03-19 13:17:00
  • mysql varchar类型求和实例操作

    2024-01-14 05:39:21
  • Python使用爬虫爬取静态网页图片的方法详解

    2021-02-18 20:07:58
  • 设计稿标注首屏线的确定始末

    2011-03-30 12:36:00
  • asp之家 网络编程 m.aspxhome.com