话不多唠,直接上代码
<div class="publish">
<video ref="video" id="videoDom" style="object-fit: cover;"></video>
<canvas style="display: none;" id="canvasCamera" width="1654" height="2339"></canvas>
<div v-if="imgSrc" class="img_bg_camera">
<img :src="imgSrc" ref="tximg" class="tx_img" />
</div>
<button @click="OpenCamera">打开摄像头</button>
<button @click="CloseCamera">关闭摄像头</button>
<button @click="setImage">拍照</button>
</div>
import { base64ConvertFile } from '@/utils/fileBase64Blob'
export default {
name: 'CanvasImg',
data () {
return {
imgSrc: '',
canvas: null,
context: null
}
},
mounted () {
this.getCamera()
},
methods: {
getCamera () {
this.canvas = document.getElementById('canvasCamera')
this.context = this.canvas.getContext('2d')
const constraints = {
video: {
width: 2339,
height: 1658,
facingMode: {
exact: "environment"
}
}
};
navigator.mediaDevices
.getUserMedia(constraints)
.then(function(stream) {
var video = document.querySelector('#videoDom')
if ('srcObject' in video) {
video.srcObject = stream
} else {
video.src = window.URL.createObjectURL(stream)
}
video.onloadedmetadata = function (e) {
video.play()
}
})
.catch(function(err) {
alert(err.name + ': ' + err.message)
})
},
setImage () {
this.context.drawImage(
this.$refs.video,
0,
0,
1654,
2339
)
const image = this.canvas.toDataURL('image/jpg')
this.$emit('refreshDataList', base64ConvertFile(image))
},
OpenCamera () {
this.getCamera()
},
CloseCamera () {
this.$refs.video.srcObject.getTracks()[0].stop()
}
}
}
export const base64ConvertFile = function (urlData, filename) {
if (typeof urlData != 'string') {
return
}
let arr = urlData.split(',')
let type = arr[0].match(/:(.*?);/)[1]
let fileExt = type.split('/')[1]
let bstr = atob(arr[1])
let n = bstr.length
let u8arr = new Uint8Array(n)
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
return new File([u8arr], 'filename.' + fileExt, {
type: type
})
}
export const dataURItoBlob = (dataURI) => {
let byteString = atob(dataURI.split(',')[1])
let mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]
let ab = new ArrayBuffer(byteString.length)
let ia = new Uint8Array(ab)
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i)
}
return new Blob([ab], { type: mimeString })
}
为什么没有style样式呢,懒得动懒得写全靠你们自由发挥。。。。。。。。。。。。!