【vue功能】多张图片合并

多张图片合并成一张图片

      • 步骤一,多张图片上传
      • 步骤二,循环获取所有绘制图片的总高度
          • new FileReader()方法作用
          • new Image()方法作用介绍
      • 步骤三,合并多张图片
          • canvas.toDataURL()作用-
          • dpr作用
      • 步骤四,下载图片

步骤一,多张图片上传

<input type="file" id="imageInput" multiple accept="image/*" @change="handleFileUpload" />
<!-- 图片绘制合并区域 -->
<div class="canvasPDF"><canvasid="myCanvas":style="{ width: wcanvansimg + 'px', height: hcanvansimg + 'px', border: '1px solid #eeeeee' }"></canvas>
</div>
handleFileUpload(event) {this.imageslist = event.target.files;console.log('初始文件内容格式',this.imageslist[0])
},

在这里插入图片描述

步骤二,循环获取所有绘制图片的总高度

//获取所有图片的总高度getImginfo() {return new Promise((resolve, reject) => {let allHeight = 0;let loadedCount = 0; // 用于追踪已加载图片数量let totalImages = this.imageslist.length; // 图片总数for (let i = 0; i < totalImages; i++) {//图片转化方式const reader = new FileReader();reader.readAsDataURL(this.imageslist[i]);reader.onload = (e) => {const img = new Image();img.onload = () => {console.log('经过转化的图片文件',e);console.log('可以获取图片宽高的图片格式',img);allHeight += img.height;loadedCount++; // 增加已加载图片计数if (loadedCount === totalImages) {resolve(allHeight);}};img.onerror = (error) => {reject(error);};//将经过转化的图片文件赋值给srcimg.src = e.target.result;};}});},

在这里插入图片描述
在这里插入图片描述

new FileReader()方法作用
  • 通过创建一个FileReader实例,你可以使用它的方法来异步读取文件内容。
  • readAsDataURL方法就是FileReader提供的一种读取方式,它将文件读取为数据URL,
  • 这是一种以Base64编码的字符串,可以直接在HTML中作为图像源使用
const file = event.target.files[0]; // 获取选中的文件if (file) {const reader = new FileReader();// 当文件读取完成后,reader.onload事件将被触发reader.onload = function(e) {// e.target.result包含了文件的数据URL,也就是base64console.log(e.target.result);// 这里可以将数据URL设置为<img>标签的src属性,显示图片};// 开始读取文件reader.readAsDataURL(file);}
new Image()方法作用介绍
  • 这里的img,就可以获取img的宽高
  • img也可以绘制在画布上
// 创建一个新的Image对象
const img = new Image();// 设置onload事件处理函数,当图片加载完成后执行
img.onload = () => {// 在这里编写当图片加载完成后想要执行的代码console.log('图片加载完成!');//img
};// 设置图片的source属性,开始加载图片
img.src = 'path/to/your/image.jpg';

步骤三,合并多张图片

 async mergeImg() {let that = this;var canvas = document.getElementById('myCanvas');const ctx = canvas.getContext('2d');let x = 0;let y = 0;//获取图片信息const res = await that.getImginfo();//展示高度that.hcanvans = res;that.wcanvans = 2400;canvas.width = that.wcanvans * that.dpr;canvas.height = res * that.dpr;for (let i = 0; i < that.imageslist.length; i++) {const reader = new FileReader();reader.readAsDataURL(this.imageslist[i]);reader.onload = (e) => {const img = new Image();img.src = e.target.result;img.onload = () => {ctx.drawImage(img, x, y, img.width, img.height);y += img.height;if (i === that.imageslist.length - 1) {// 下载图片that.downloadImage(canvas.toDataURL(),`合并图片.png`)}};};}ctx.scale(this.dpr, this.dpr);},
canvas.toDataURL()作用-
  • 获取画布图片的base64格式
dpr作用
  • 获取设备像素比
  created() {this.dpr = window.devicePixelRatio;},

步骤四,下载图片

//参数1为base64格式图片文件,参数2是下载后的图片文件名downloadImage(base64str, filename) {const link = document.createElement('a');link.href = 'data:' + 'image/png';link.href += base64str;link.download = filename + '.png';document.body.appendChild(link);link.click();document.body.removeChild(link);},

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/3074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NASA数据集——有源空腔辐射计辐照度监测仪(ACRIM)II 本地格式的 UARS 机载太阳总辐照度(TSI)2022年1月版本

Active Cavity Radiometer Irradiance Monitor (ACRIM) II Total Solar Irradiance (TSI) aboard UARS in Native format 简介 ACRIMII_TSI_UARS_NAT 数据是上层大气研究卫星&#xff08;UARS&#xff09;上的有源空腔辐射计辐照度监测仪 II&#xff08;ACRIM II&#xff09;…

云安全防御篇:如何识别并做好服务器DDoS防护?

伴随着全球互联网业务和云计算的快速发展&#xff0c;作为一种破坏力巨大的攻击方式&#xff0c;DDoS攻击正以超出服务器承受能力的流量淹没网站&#xff0c;导致服务器宕机、企业营业额下跌&#xff0c;甚至企业品牌形象受损。越是面对复杂的攻击&#xff0c;就需要性能更强的…

2万8金句美句格言签名句子ACCESS\EXCEL数据库

优美句子类的数据已经有《33万多优美句子经典句子ACCESS数据库》、《近2万签名的句子网络签名ACCESS数据库》、《24万QQ伤感签名微信签名ACCESS数据库》、《2万多条QQ签名论坛签名大全ACCESS数据库》&#xff0c;今天又遇到一个&#xff0c;感觉也很不错&#xff0c;发上来看看…

数字科技助力垃圾分类展厅,增强内容交互新体验!

如今&#xff0c;许多行业都开始运用数字技术&#xff0c;探索其在展览展示领域中的应用&#xff0c;其中垃圾分类展厅作为现代城市文明建设的重要一环&#xff0c;也通过这些技术的运用&#xff0c;打造出了更加生动且富有科技感的展示空间&#xff0c;它不仅提升公众对垃圾分…

如何客观评价小米首款汽车产品SU7

作者&#xff1a;艾泊宇 在深入探讨小米首款汽车产品SU7的客观评价时&#xff0c;我们应摒弃个人情感&#xff0c;忽视市场营销的噪音&#xff0c;并过滤掉网络上的负面评价&#xff0c;专注于产品本身&#xff0c;这里我们需要用到我的产品交集模型 从用户角度看 数据是揭示用…

Day1--什么是网络安全?网络安全常用术语

目录 1. 什么是网络安全&#xff1f; 信息系统&#xff08;Information System&#xff09; 信息系统安全三要素&#xff08;CIA&#xff09; 网络空间安全管理流程 网络安全管理 2. 网络安全的常用术语 3. 网络安全形势 4. 中国网络安全产业现状 1. 什么是网络安全&am…

wps/word中字体安装教程

问题&#xff1a;下载的字体怎么导入wps/word wps或word中没有相应字体&#xff0c;怎么导入。其实方法很简单。 Step 1&#xff1a;下载字体 首先&#xff0c;在网上搜索自己喜欢的字体&#xff0c;然后下载到本地。字体的格式通常是.ttf 下面是我网上找的字体&#xff08…

【Camera KMD ISP SubSystem笔记】CAM SYNC与DRQ①

在android系统中fence用于不同模块需要访问同一块buffer的同步&#xff0c;例如camera和graphic。对于preview buffer, camera是生产者graphic是消费者。 camera需要生产图像数据到preview buffer时需要等待preview buffer的 fence可用。 camera sync是高通camx框架里面用于各个…

【LeetCode】191. 位1的个数

题目链接&#xff1a;191. 位1的个数 题目描述&#xff1a; 解法1&#xff1a;题意很简单就不说了&#xff0c;这里先说一种最简单的解法&#xff0c;首先我们知道一点&#xff1a;n&(n-1)相当于把是将n的二进制位中最低位的1变为了0&#xff0c;其它位保持不变&#xff0…

强制内容在一行显示

强制内容在一行显示 .one {white-space: nowrap;overflow: hidden;text-overflow: ellipsis; /* 可选&#xff0c;当内容超出一行时&#xff0c;用省略号表示 */ }效果

【机器学习】概率模型在机器学习中的应用:以朴素贝叶斯分类去为例

概率模型在机器学习中的应用&#xff1a;以朴素贝叶斯分类器为例 一、概率模型的基本原理二、朴素贝叶斯分类器的原理与实现三、朴素贝叶斯分类器的应用与挑战四、结论与展望 在大数据与人工智能时代&#xff0c;概率模型在各个领域发挥着至关重要的作用。概率模型以概率论和统…

基于STM32F4系列的ETH IAP在线升级程序

目录 1、前言 2、以太网的移植&#xff08;无操作系统&#xff09; 3、移植FATS 系统 4、移植ETH 驱动及 DP83848驱动 5、Tftp 服务程序 6、注意事项 ​7、代码 资料下载地址&#xff1a;基于STM32F4系列的ETH IAP在线升级程序 1、前言 此bootloader程序可以通过http…

网络爬虫之HTTP原理

** URI和URL URI的全称Uniform Resource Identifier &#xff0c;即统一资源标志符。URL的全称Uniform Resource Locator 即统一资源定位符。 URL是URI的子集&#xff0c;也就是每一个URL就是URI&#xff0c;但是每一个URI不一定是URL&#xff0c;URI还有一个子类叫URN&#x…

从零开始写 Docker(十二)---实现 mydocker stop 停止容器

本文为从零开始写 Docker 系列第十二篇&#xff0c;实现类似 docker stop 的功能&#xff0c;使得我们能够停止指定容器。 完整代码见&#xff1a;https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现有一个大致认识&#xff1a; 核心原理&#x…

[韭]第一次参加护网行动要注意什么??

前言 为什么要写这篇文章呢&#xff0c;一是对当下安全环境进行一个分析&#xff0c;二是以过来人的身份留下一点经验。 当下安全环境分析 现在这个时代&#xff0c;大家都已经踏上了信息高速公路&#xff0c;可以自己拿搜索引擎搜一下自己知道的大厂裁员情况&#xff0c;有…

油猴脚本:bing 搜索结果居中

文章目录 效果预览脚本使用步骤安装油猴脚本添加脚本 效果预览 脚本 // UserScript // name bing居中 // namespace http://tampermonkey.net/ // version 2024-04-24 // description try to take over the world! // author You // match http…

rust 卸载重新安装 安装

原因&#xff1a;接触区块链时报错 linking with x86_64-w64-mingw32-gcc failed: exit code: 1 Rust编译需要C环境&#xff0c;如果你没有&#xff0c;Rust也能安装成功&#xff0c;只是无法编译代码 C的编译工具有两个&#xff0c;一个是msvc&#xff0c;也就是visual studi…

CTFshow-PWN-栈溢出(pwn44)

64位的 system(); 但是好像没"/bin/sh" 上面的办法不行了&#xff0c;想想办法 检查&#xff1a; 是 64 位程序 ida 反编译 main 函数&#xff1a; 跟进 ctfshow 函数&#xff1a; 存在栈溢出 offset&#xff1a;0xAh8 在前面经验的基础上&#xff0c;这里我们直…

Python-VBA函数之旅-issubclass函数

目录 一、issubclass函数的常见应用场景&#xff1a; 二、issubclass函数使用注意事项&#xff1a; 三、如何用好issubclass函数&#xff1f; 1、issubclass函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff…

Linux下载及安装OpenSSL

文章目录 前言一、OpenSSL下载二、OpenSSL安装1.上传下载好的安装包到服务器2.解压3.切换目录4.配置config5.编译6.安装7.备份旧版本OpenSSL7.创建软链接8.添加OpenSSL动态链接库9.更新库缓存10.查看OpenSSL版本验证安装是否成功 前言 一般系统会自带有OpenSSL&#xff0c;我们…