1.两个图片保存的原理

要将两个图片保存下载,要使用h5的canvas来实现,不需要引用任何插件就可以实现。这里使用canvas的drawImage函数,利用这个函数可以将两个图片都放入画布中,然后调整画图片的位置,最后在使用canvas的转换图片方法下载,用法如下:

let canvas = document.createElement("canvas");
//设置区域大小
canvas.width = 200;
canvas.height = 300;let context = canvas.getContext("2d");//drawImage有多个参数(image,x,y,width,height)
context.drawImage(myImage, 0, 0, canvas.width, canvas.height);

2. 实现步骤

主要是将两个图片(可以是base64或文件路径)分别加入canvas画布中,在使用canvas的toDataURL方法,将画布中的内容转为base64,通过a链接下载(演示图片违规了,给二维码打了一个码)

代码运行样式:

悬浮上去显示保存提示:

点击后下载:

1.代码的html部分

<body><main class="complete-box"><!-- 背景图 --><div class="subject-box"><!-- 二维码 --><img src="./yuansusu.png" alt="我的二维码海报"></div><!-- 遮罩层 --><div class="block-box"><p>点击保存图片</p></div></main>
</body>

2.js代码(实现方法)

  let bgBox = document.querySelector('.complete-box')let blockBox = document.querySelector('.block-box')//绑定进入函数bgBox.addEventListener('mouseenter', () => {blockBox.style.display = 'block'})//绑定离开函数bgBox.addEventListener('mouseleave', () => {blockBox.style.display = 'none'})//绑定点击下载函数bgBox.addEventListener('click', () => {console.log('下载');//使用canvas来将两张图片合在一起let canvas = document.createElement("canvas");canvas.width = 200;canvas.height = 300;let context = canvas.getContext("2d");//创建一个矩形(x,y,width,height)context.rect(0, 0, canvas.width, canvas.height);context.fillStyle = "#fff";context.fill();//创建一个图片let myImage = new Image();//背景图片  你自己本地的图片、在线图片、base64图片流myImage.src = './wall.jpg';//运行跨域,有时候下载不是同源会阻止下载myImage.crossOrigin = 'Anonymous';myImage.onload = () => {//第一张图片的位置和大小context.drawImage(myImage, 0, 0, canvas.width, canvas.height);let myImage2 = new Image();//二维码图片myImage2.src = './yuansusu.png';myImage2.crossOrigin = 'Anonymous';myImage2.onload = () => {//第二张图片(设置居中位置)context.drawImage(myImage2, 20, 70, 160, 160);//转成base64流let base64 = canvas.toDataURL("image/png");let aLink = document.createElement("a");aLink.download = Date.now(); //使用时间戳给文件命名aLink.href = base64;aLink.click();}}})

3.css代码

<style>.complete-box {position: relative;width: 200px;height: 300px;margin: 0 auto;background-image: url(./wall.jpg);background-size: 100% 100%;display: flex;justify-content: center;align-items: center;}.subject-box {width: 160px;}.subject-box>img {width: 100%;}.block-box {position: absolute;left: 0;top: 0;width: 100%;height: 100%;text-align: center;color: white;display: none;background-color: rgba(0, 0, 0, 0.3);z-index: 2;}</style>

结语:利用cavans还可以将多个图片拼接到一起,调整图片的位置来显示

js将两个图片保存下载(二维码保存为例)相关推荐

  1. 二维码 内嵌图片,下载二维码

    功能 二维码可内嵌图片 可下载二维码 功能集合成Vue组件 使用技术 Vue.qrcodejs2.html2canvas 直接上代码 <template><div class=&qu ...

  2. qrcodejs2生成二维码,通过canvas绘制带边框+中间logo的二维码图片,下载二维码

    文章目录 一.通过qrcodejs2生成一个二维码 二.点击[下载配置服务器二维码]来下载二维码 1.通过canvas去绘制 边框+二维码+logo (1)为canvas增加绘制圆角矩形的方法(can ...

  3. 网页生成二维码 把二维码变成图片 下载二维码

    目录 网页生成二维码 1 将二维码变成图片 2 1效果:二维码变成了图片 2 下载二维码 2 1全部代码 3 网页生成二维码 导入生成二维码需要的js文件(https://github.com/lrs ...

  4. vue引用qrcodejs2生成、下载二维码、复制到剪贴板

    使用的vue2.x版本,UI框架为ant design vue 1.X版本 1.场景:页面需要展示二维码并且需要下载二维码的功能 效果图: 引用插件: yarn add qrcodejs2@0.0.2 ...

  5. uniapp weapp-qrcode.js生成二维码,并下载二维码图片

    找了很多插件,但是都太复杂,不符合自己的要求 找了个最简单的.weapp-qrcode.js ,生成二维码没有问题,但是下载图片获取不到图片路径,自己稍微改造了一下 https://github.co ...

  6. vue js前端根据所需参数生成二维码并下载

    需要一个插件 qrcodejs2, 使用 npm install qrcodejs2 --save 下载该依赖包. 在vue中引入(我这边是vue2).import QRCode from 'qrco ...

  7. Java生成二维码并以IO流的形式返回给前端展示(不需写入服务器),以及下载二维码图片

    目录 场景 方案分析 第一步--引入依赖 第二步--编写工具类 第三步--编写API接口 第四步--访问测试 第五步--下载图片 场景 最近笔者做的项目中,有一个需求: 在系统中生成一个二维码,用户保 ...

  8. JS生成二维码以及点击下载二维码

    JS生成二维码 效果 扫描二维码可访问指定链接或当前网站链接,内容可以自己更改 "复制链接",点击按钮复制当前网站链接 如何获取当前网站链接 源码 textarea{opacity ...

  9. vue3+qrcode插件实现下载二维码图片(.png、.svg格式)

    注释:qrcode可通过canvas的toDataURL方法下载对应的png图片,比较恶心的是下载svg格式(必须记录一下) 安装一下qrcode插件 npm i qrcode --save 或 ya ...

  10. 记录使用QRCode 显示并下载二维码图片

    记录使用QRCode 生成二维码 项目安装qrcode 命令:npm install --save qrcodejs2 引入 import QRCode from 'qrcodejs2' 后端提供qr ...

最新文章

  1. 开箱即用,Knative 给您极致的容器 Serverless 体验
  2. 【译】Alethio: Lighting Up the Blockchain with Real Time Data
  3. python基础-牛逼的三层循环,实现想在那里退出,就在那里退出。
  4. 身份令牌toKen Vuex + localStorage结合存储
  5. 仿豆丁百度文库网页版阅读器完整解决方案
  6. Java占位符替换工具类
  7. java初学者必看经典
  8. android与服务器交互总结(json,post,xUtils,Volley)
  9. IntelliJ IDEA 激活
  10. 【安装包】gcc编译器
  11. docker导入导出
  12. 服务器与交换机的lacp协议,IEEE 802.3ad 链路聚合与 LACP 的简单知识 EtherChannel 总结...
  13. magick++配置
  14. 如何找到外文文献对应的中文文献?
  15. yum 下载并切换到本地源(银河麒麟V10,中标麒麟V5)
  16. 设计网站制作步骤是什么?一个好的网站制作标准是怎样的?
  17. 清空CheckBox 勾选
  18. 均方距离计算公式_均方末端距的统计计算法.ppt
  19. billing block
  20. SAP顾问的转型之路

热门文章

  1. 机遇与挑战并存,神画科技玩转智能投影并不易
  2. 小谈苹果M1芯片性能
  3. 如何学习python量化交易接口的搭建?
  4. 求两个字符串的LCS(最长公共子串)后缀数组
  5. 使用vue-element-admin管理后台 更改浏览器图标
  6. 系统之家 Ghost Win7 SP1 纯净版 32位 V6.0
  7. linux 模拟打电话,Ubuntu+Python+UIAutomator写Android自动化测试脚本-模拟拨打电话
  8. scrapy框架初识1
  9. 变分自编码器VAE的数学原理
  10. 出现身份验证错误,无法连接到本地安全机构