首页 > 其他分享 > js多图合成一张图

js多图合成一张图

时间:2023-11-03 17:36:15浏览次数:25  
标签:src canvas const 合成 base64 js 画布 多图 image

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=url
          return new Promise((resolve,reject)=>{
              image.onload=function (){
                  return resolve(image)
              }
              image.error=function (){
                  return resolve(null)
              }
          })
     }
     class compoundImgs{
         convas:any
         ctx:any
         constructor({bgWidth:number,bgHeight:number}){
             this.convas=document.createElement('canvas')
             this.canvas.width=bgWidth
             this.canvas.height=bgHeight
             this.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)
                 }
             })
         }
         //打印画布base64
         print(){
             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()
                   })


标签:src,canvas,const,合成,base64,js,画布,多图,image
From: https://www.cnblogs.com/bbigger004/p/17808039.html

相关文章

  • python训练阿里云语音合成模型
    训练阿里云多人训练语音合成模型model_link:https://modelscope.cn/models/speech_tts/speech_sambert-hifigan_tts_zh-cn_multisp_pretrain_24k/summary1.获取KANTTS算法训练框架2.配置虚拟环境(conda)需要下载pytorch及其他kantts算法依赖3.数据准备:https://modelsco......
  • flv.js断开重连-画面卡顿-跳帧重连
    1、播放页面卡住不动是进行截图并在一定时间内重新连接,2、重连阶段显示截取卡住画面把图片显示等待视频流上来不至于video标签显示成黑屏;<video  src=""  autoplay  muted  loop  :controls="false"  style="background:#000"   :poster="i......
  • angie njs 模块试用
    angienjs是一个类似lua的模块,提供了基于js进行nginx功能开发的能力(但是目前没有nginxlua模块强大)以下是一个简单试用环境准备基于了以前测试nginxlua模块的基础镜像http.js functionfoo(r){r.log("hellofromfoo()handler");return......
  • js事件循环机制
    何为进程?  程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程何为线程? 有了进程后,就可以运行程序的代码了。 运行代码的「人」称之为「线程」。 一个进程至少有一个线程,所以在进程开启后会自动创建一个线程来运行代码,该线程称之为主线程。 ......
  • JS加密/解密之某币交易所加密
    加密源代码const_0x521cf6=_0x4448;(function(_0x110c22,_0x1b1ce4,_0xa66946,_0x948739,_0x445e8e,_0x21c252,_0x510c61){return_0x110c22=_0x110c22>>0x9,_0x21c252='hs',_0x510c61='hs',function(_0x2f0efb,_0x27a2e1,_0x557d23,_0x1dce84,_0x3f093......
  • js常用复制功能
    方式一://方式一:支持httpletstr="aaaaa"constcopyInput=document.createElement('input');copyInput.value=str;document.body.appendChild(copyInput);copyInput.select();document.execCommand('Copy');//方式二:不支持httplettext......
  • nextjs运行报错ReferenceError: Request is not defined
    安装npxcreate-next-app@latest运行npmrundev使用node版本v16.20.1,报错:ReferenceError:Requestisnotdefined 解决方案:切换node:v18.16.1(npm:v9.5.1)重新安装项目并运行,成功!......
  • 让我摸个鱼吧!纯JS复刻B站首页头图 - 海洋视差效果
    最近发现B站的首页头图的交互效果非常有趣,如下图所示,当鼠标在画面中左右滑动时,海洋生物会栩栩如生地动起来,这可比刷视频得劲多了啊:这是使用多张具有不同视角的图片,通过透视、位移等处理方式来实现的视差效果,在佩服UI与前端对网页交互效果方面的努力和探索之外,我也沉浸在这片“......
  • 2023年11月最新全国省市区县和乡镇街道行政区划矢量边界坐标经纬度地图数据 shp geojs
    发现个可以免费下载全国 geojson 数据的网站,推荐一下。支持全国、省级、市级、区/县级、街道/乡镇级以及各级的联动数据,支持导入矢量地图渲染框架中使用,例如:D3、Echarts等geojson数据下载地址:https://geojson.hxkj.vip该项目github地址:https://github.com/TangSY/echarts-m......
  • pycharm使用小技巧_json与字典
    pycharm控制台打印的数据键值对都是双引号,则是数据的格式json键值对都是单引号,则是数据的格式字典示例代码如下:importjsonfromrandomimportrandint""""需求:用户注册页面,手机号唯一,通过需要手机号进行注册"""#定义一个json字符窜register_data='{"name"......