vue高拍仪拍照后上传服务器回显到Upload(记录)

news/2025/1/16 4:51:58/

1.子组件(高拍仪的拍照和上传服务器)

<template><div class="photoClass"><div class="upPhotoClass" @click="upPhotoFn" /><el-dialog :visible.sync="dialogVisible" :modal="false" width="30%" :show-close="false"><canvas v-show="false" ref="canvas" width="400" height="400" /><video ref="video" width="400" height="400" autoplay /><span slot="footer" class="dialog-footer"><el-button @click="handleClose">取 消</el-button><el-button type="primary" @click="photograph">确 定</el-button></span></el-dialog></div>
</template><script>
import { apiUpload } from '@/api/index.js'
export default {props: {edits: {type: Boolean,default: true}},data() {return {dialogVisible: false,camera: '',imgSrc: ''}},computed: {},methods: {//点击弹出高拍仪摄像头upPhotoFn() {if (!this.edits) {//是否可以点开dialogreturn}this.dialogVisible = truethis.getAllCamera()},handleClose() {this.closeCamera()this.dialogVisible = false},// 获取摄像头getAllCamera() {navigator.mediaDevices.enumerateDevices().then(this.gotDevices).then(this.callCamera).catch(this.handleError)},// 选择摄像头gotDevices(deviceInfos) {console.log(deviceInfos)const options = []for (var i = 0; i < deviceInfos.length; ++i) {var deviceInfo = deviceInfos[i]var option = document.createElement('option')option.value = deviceInfo.deviceIdif (deviceInfo.kind === 'videoinput') {options.push({value: deviceInfo.deviceId,label: deviceInfo.label})} else {// console.log('Found ome other kind of source/device: ', deviceInfo);}}this.camera = options[1].value//options[1]高拍仪第二个摄像头,第一个写为options[0]},// 调用摄像头错误handleError(error) {this.$message.error(error.name + ': ' + error.message)},// 调用摄像头callCamera() {// this.getAllCamera();// H5调用电脑摄像头APInavigator.mediaDevices.getUserMedia({// video: true,video: {optional: [{sourceId: this.camera}]}}).then(success => {// console.log(success);// 摄像头开启成功this.$refs['video'].srcObject = success// 实时拍照效果this.$refs['video'].play()}).catch(error => {this.$message.error('摄像头开启失败,请检查摄像头是否可用并重新打开!')})},// 关闭摄像头closeCamera() {if (!this.$refs['video'].srcObject) {this.dialogVisible = falsereturn}const stream = this.$refs['video'].srcObjectconst tracks = stream.getTracks()tracks.forEach(track => {track.stop()})this.$refs['video'].srcObject = null// this.$emit('closeCamera')},//拍照photograph() {const ctx = this.$refs['canvas'].getContext('2d')// 把当前视频帧内容渲染到canvas上ctx.drawImage(this.$refs['video'], 0, 0, 400, 400)// 转base64格式、图片格式转换、图片质量压缩// let imgBase64 = this.$refs['canvas'].toDataURL('image/jpeg', 0.7)const imgurl = this.$refs['canvas'].toDataURL('image/png')this.imgSrc = imgurlconsole.log(imgurl)this.onUpload()},onUpload() {const file = this.imgSrc // 把整个base64给fileconst time = new Date().valueOf() // 生成时间戳const name = time + '.png' // 定义文件名字(例如:abc.png , cover.png)const conversions = this.dataURLtoFile(file, name) // 调用base64转图片方法const data = new FormData()data.append('file', conversions)apiUpload(data).then(res => {//上传到服务console.log(res)if (res.code == 200) {this.$emit('changPhotoFn', res.data)//返回值传给父组件}}).catch((e) => {console.log(e)})this.closeCamera()this.dialogVisible = false},// base64转文件dataURLtoFile(dataurl, filename) {var arr = dataurl.split(',')var mime = arr[0].match(/:(.*?);/)[1]var bstr = atob(arr[1])var n = bstr.lengthvar u8arr = new Uint8Array(n)while (n--) {u8arr[n] = bstr.charCodeAt(n)}return new File([u8arr], filename, { type: mime })}}
}
</script><style scoped>
.photoClass {width: 120px;height: 120px;
}
.upPhotoClass {width: 100%;height: 100%;border: 1px dotted #d9d9d9;
}
.photoDialogClass {/* height: 300px; */
}
</style>

2.父组件

 

 


http://www.ppmy.cn/news/462573.html

相关文章

祝牛年吉祥,前程似锦,吉星高照,财运亨通,合家欢乐,飞黄腾达,福如东海,寿比南山,幸福美满,官运亨通,美梦连连。

新年伊始&#xff0c;岁岁余乐&#xff0c;愿国泰民安&#xff0c;岁岁常欢愉&#xff0c;万事皆胜意&#xff01; 俗话说&#xff1a;无志之人常立志&#xff0c;有志之人立长志&#xff0c;常立志不如立长志&#xff0c;但总好过不立志。 春节期间&#xff0c;基本没动过电脑…

恒空吉星携手海宇勇创签署战略合作协议

2018年12月29日&#xff0c;海宇勇创获恒空吉星百万投资&#xff0c;双方建立战略合作伙伴关系&#xff01; 海宇勇创科技秉承为企业信息化赋能的理念&#xff0c;对传统企业进行“产业路由器”升级和IT赋能。 未来将与恒空吉星携手并进、共创双赢&#xff0c;成为传统企业升级…

正大国际期货招商低预留4美金/手

公司留存双边4美元/单&#xff0c;大恒指26港币/单&#xff0c;小恒指12港币/单 需开通API接口&#xff0c;正大独家交易软件金智慧&#xff0c;流畅不卡盘不掉单 首先说结论&#xff1a;新产品的价值旧产品价值替换成本。 如果一个产品想要让他的价值非常大&#xff0c;让其他…

给10年后的一封信

今天是2023.9.15日&#xff0c;是我在瑞阳吉星实习的第三个月。 我只是想单纯发给2033年9月15日的我&#xff0c;这是一封跨越时空的信。 10年后的我&#xff0c;你现在是什么职业呢&#xff1f; 爸妈&#xff0c;他们还好吗&#xff1f; 奶奶&#xff0c;怎么样啦&#xff1f;…

Java之枚举、注解与反射

&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;创作不易&#xff0c;各位看官点赞收藏. Java之枚举、注解与反射 文章目录 Java之枚举、注解与反射1、枚举类1.1、自定义枚举类1.2、Enum 枚举类1.3、枚举类常用方法1.4、枚举类实现接口 2、注解2.1、文档注解2.2、内置注…

如何为您的ADC选择最合适的基准电压源和放大器

主题: 驱动精密ADC&#xff1a;如何为您的ADC选择最合适的基准电压源和放大器? 在线问答: [问&#xff1a;callhxw] 如何评定一颗ADC非线性&#xff1f;丢码&#xff1f; [答&#xff1a;Jing] you can use ADC"s INL and DNL parameter to evaluate the non-linearit…

100行Html5+CSS3+JS代码实现元旦倒计时界面

一、前言 2022年到了&#xff0c;祝大家虎年大吉喜气临&#xff0c;昂首摆尾迎春来。双眼圆睁看世界&#xff0c;万水千山尽开颜。胡须翘翘美姿态&#xff0c;人人开心祝平安。巨大身躯摇摆摆&#xff0c;坎坷困境当笑谈。愿你虎年万事顺&#xff0c;吉星高照旺旺旺&#xf…

商业遥感卫星公司长光卫星冲刺科创板:半年亏2亿 拟募资27亿

雷递网 雷建平 12月25日 长光卫星技术股份有限公司&#xff08;简称&#xff1a;“长光卫星”&#xff09;日前递交招股书&#xff0c;准备在科创板上市。长光卫星计划募资26.83亿元。 其中&#xff0c;12.69亿元用于“吉林一号”卫星星座建设项目&#xff08;二期&#xff09;…