当前位置: 首页 > news >正文

js多图合成一张图

具体思路

先设置画布的宽高,再将每个图片整理成一个对象的数组通过某个方法传出合成后的base64
(1)、创建一个画布的类,他的属性是canvas虚拟dom和ctx

(2)、构造器初始化convas对象、ctx、convas的宽高

(3)、这个类应该有将配置的对象数组合成图片的方法和导出画布base64的方法

图片数组与画布格式

/画布的大小{bgWidth:'画布的宽',bgHeight:'画布的高'} //图片的配置[{src:"图片的base64",x:'放入画布的x坐标',y:'放入画布的y坐标',height:'设置传入图片的高度',width:'设置传入图片的宽度'}]

创建实现功能的类

//将base64转成虚拟dom的功能function getImage(url){const image=new window.Image()if(/^http/.test(url)){image.setAttribute('crossOrigin','anonymous')}image.src=urlreturn new Promise((resolve,reject)=>{image.onload=function (){return resolve(image)}image.error=function (){return resolve(null)}})}class compoundImgs{canvas:anyctx:anyconstructor({bgWidth:number,bgHeight:number}){this.canvas=document.createElement('canvas')this.canvas.width=bgWidththis.canvas.height=bgHeightthis.ctx=this.canvas.git Context('2d')}async run(imgConfigs){//获取Dom节点promise对象形成的数组const imgDomsP=imgConfigs.map(async ({src})=>{const imgDom = await getImage(src)return imgDom})//dom节点数组const imgEles=await Promise.all(imgDomsP)//遍历画图imgEles.map((ele,i)=>{const {x=0,y=0,width=0,height=0}=imgConfigs[i]if(ele){this.ctx.drawImage(ele,x,y,width,height)}})}//打印画布base64print(){return this.canvas.toDataURL()}}export default compoundImgs

使用方法

const mycanvas=new compoundImgs({ bgWidth:1080,bgHeight:1920})mycanvas.run([{src:图片A的base64,x:A的x坐标,y:A的y坐标,height:A的高,width:A的宽},{src:图片B的base64,x:B的x坐标,y:B的y坐标,height:B的高,width:B的宽}]).then(()=>{console.log(mycanvas.print())})

http://www.lryc.cn/news/263221.html

相关文章:

  • 利用原始套接字解决mac地址错误问题【南瑞SysKeeper-2000】
  • JVM- 为什么G1垃圾回收器需要有大对象区
  • 操作系统的界面
  • User 怎么在anaconda的虚拟环境中安装下载好的jieba.tar.gz包呢
  • 1.【分布式】分布式事务详解
  • selenium-wire简介
  • 华为组播配置案例
  • lua语法
  • 5A-Downloader,m3u8文件转mp4文件,音视频分离ts合并、转mp4
  • 标准IO与文件IO
  • 流行的 React 相关库和框架
  • 游戏引擎?
  • C语言--字符函数与字符串函数
  • 整理了一些热门、含免费次数的api,分享给大家
  • Wireshark在网络性能调优中的应用
  • 关于设计师的自我评价(合集)
  • Hudi Clustering
  • 通过与 Team Finance 整合,Casper Network 让 Token 的创建、部署更加高效
  • Linux软件管理rpm和yum
  • uart和usart的区别
  • 原生微信小程序-使用 阿里字体图标 详解
  • 机器学习 | 机器学习基础知识
  • OpenHarmony鸿蒙原生应用开发,ArkTS、ArkUI学习踩坑学习笔记,持续更新中。
  • RHCE8 资料整理(十)二
  • CUDA 学习记录2
  • 探索Qt 6.3:了解基本知识点和新特性
  • 持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布
  • 一些好用的VSCode扩展
  • 3dsmax渲染太慢,用云渲染农场多少钱?
  • JVM-9-Class类文件的结构