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

vue中实现使用相框点击拍照,canvas进行前端图片合并下载

拍照和相框合成,下载图片dome

一、canvas介绍

Canvas是一个HTML5元素,它提供了一个用于在网页上绘制图形、图像和动画的2D渲染上下文。Canvas可以用于创建各种图形,如线条、矩形、圆形、文本等,并且可以通过JavaScript进行编程操作。

Canvas元素本身是一个矩形框,可以通过CSS样式进行样式设置。在Canvas上绘制图形时,需要先获取Canvas的2D渲染上下文,然后通过上下文的方法来进行绘制。

二、navigator.mediaDevices.getUserMedia介绍

navigator.mediaDevices.getUserMedia是一个Web API,它允许网页访问用户的媒体设备,如摄像头和麦克风。这个API返回一个Promise对象,成功后会resolve回调一个MediaStream对象。

使用navigator.mediaDevices.getUserMedia调用系统原生摄像头功能时,需要调用其getUserMedia方法并传入一个包含媒体类型约束的约束对象。这个约束对象可以包含音频、视频或两者都包含。 

navigator.mediaDevices.getUserMedia({ audio: true, video: true })  
  .then(function(stream) {  
    // 在这里使用媒体流  
  })  
  .catch(function(err) {  
    // 处理错误  
  });

如果用户同意,getUserMedia方法会返回一个包含音频和视频轨道的MediaStream对象。我们可以在then回调函数中使用这个媒体流。如果用户拒绝访问权限,或者需要的媒体源不可用,promise会reject回调一个PermissionDeniedError或者NotFoundError。

三、拍照下载图片功能

1:拍照画布
<!-- 拍照canvas -->
<canvas  style="display: none;"  ref="canvasCamera" class="canvas"></canvas>
2:显示调用摄像头效果
 <video ref="photoVideo" autoplay class="video"></video>
3:拍照后显示的图片
<img :src="downloadImgLink" alt="" ref="photosDownload"  class="photos-download">
3:点击拍照的按钮
<button class="operate-button" @click="btnTakePhotoClicked"> <div class="round"></div>
</button>

四、方法

1:点击拍照
async btnTakePhotoClicked(){this._context2d=this.canvasCamera.getContext("2d");//如果已经拍照了就不能在点击拍照if(!this.photoEnabled) return// 将canvas画布设置和视频元素的大小一样this.canvasCamera.width=this.photoVideo.offsetWidththis.canvasCamera.height=this.photoVideo.offsetHeight// 截取和视频一样大小的图片保证图片没有变形this._context2d.drawImage(this.photoVideo,0,0,this.photoVideo.offsetWidth,this.photoVideo.offsetHeight )this.downloadImgLink =this.canvasCamera.toDataURL("image/png"); // 截取视频最后一帧this.photoEnabled=false},
2:下载拍摄照片
 //下载拍摄的照片async downloadImg(){//如果没有拍照点击下载无效if(this.downloadImgLink==='') returnlet downloadBase64= await this.composeImgs(this.photoImg, this.photosDownload);//下载base64格式图片需要使用a标签来创建let a = document.createElement("a");a.style.display = "none";a.download = 'christmas';a.href = downloadBase64;document.body.appendChild(a);a.click();// 下载完成可以点击拍照this.photoEnabled=true//下载完成清空上次拍照地址this.downloadImgLink=''},
3:将拍好的照片和相框合成一张图片,返回一个base64的图片地址
http://www.lryc.cn/news/261984.html

相关文章:

  • 边缘检测@获取labelme标注的json黑白图掩码mask
  • 嵌入式培训-数据结构-day23-线性表
  • C# DotNetCore AOP简单实现
  • 19.Tomcat搭建
  • HarmonyOS云开发基础认证考试满分答案(100分)【全网最全-不断更新】【鸿蒙专栏-29】
  • Unity项目里Log系统该怎么设计
  • 设计模式-状态(State)模式
  • oracle怎么存放json好
  • 【计算机网络】—— 详解码元,传输速率的计算|网络奇缘系列|计算机网络
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • 计算机网络:网络层(无分类编址CIDR、计算题讲解)
  • Learning Semantic-Aware Knowledge Guidance forLow-Light Image Enhancement
  • 关于嵌入式开发的一些信息汇总:开发模型以及自托管开发(二)
  • 【JavaEE】多线程案例 - 定时器
  • 网络小测------
  • 基于linux系统的Tomcat+Mysql+Jdk环境搭建(二)jdk1.8 linux 上传到MobaXterm 工具的已有session里
  • 04-Nacos中负载均衡规则的配置
  • Kotlin 中的 `use` 关键字:优化资源管理(避免忘记inputStream.close() ?)
  • 时序预测 | Python实现GRU-XGBoost组合模型电力需求预测
  • 扁平化菜单功能制作
  • 网络基础——路由协议及ensp操作
  • Python-折线图可视化
  • C++类与对象 (上)
  • no module named ‘xxx‘
  • Go实现MapReduce
  • Axure的交互样式和情形
  • Mybatis在新增某个数据后,如何获取新增数据的id
  • 12.4~12.14概率论复习与相应理解(学习、复习、备考概率论,这一篇就够了)
  • 关于多重背包的笔记
  • 如何使用 Java 的反射