getCompetence() {

var _this = this

this.thisCancas = document.getElementById(‘canvasCamera‘)

this.thisContext = this.thisCancas.getContext(‘2d‘)

this.thisVideo = document.getElementById(‘videoCamera‘)

// 旧版本浏览器可能根本不支持mediaDevices,我们首先设置一个空对象

if (navigator.mediaDevices === undefined) {

navigator.mediaDevices = {}

}

// 一些浏览器实现了部分mediaDevices,我们不能只分配一个对象

// 使用getUserMedia,因为它会覆盖现有的属性。

// 这里,如果缺少getUserMedia属性,就添加它。

if (navigator.mediaDevices.getUserMedia === undefined) {

navigator.mediaDevices.getUserMedia = function(constraints) {

// 首先获取现存的getUserMedia(如果存在)

var getUserMedia =

navigator.webkitGetUserMedia ||

navigator.mozGetUserMedia ||

navigator.getUserMedia

// 有些浏览器不支持,会返回错误信息

// 保持接口一致

if (!getUserMedia) {

return Promise.reject(new Error(‘getUserMedia is not implemented in this browser‘))

}

// 否则,使用Promise将调用包装到旧的navigator.getUserMedia

return new Promise(function(resolve, reject) {

getUserMedia.call(navigator, constraints, resolve, reject)

})

}

}

var constraints = {

audio: false,

video: {

width: this.videoWidth,

height: this.videoHeight,

transform: ‘scaleX(-1)‘

}

}

navigator.mediaDevices

.getUserMedia(constraints)

.then(function(stream) {

// 旧的浏览器可能没有srcObject

if (‘srcObject‘ in _this.thisVideo) {

_this.thisVideo.srcObject = stream

} else {

// 避免在新的浏览器中使用它,因为它正在被弃用。

_this.thisVideo.src = window.URL.createObjectURL(stream)

}

_this.thisVideo.onloadedmetadata = function(e) {

_this.thisVideo.play()

}

})

.catch((err) => {

console.log(err)

})

},

//  绘制图片(拍照功能)

setImage() {

var _this = this

// 点击,canvas画图

_this.thisContext.drawImage(_this.thisVideo,0,0,_this.videoWidth,_this.videoHeight)

// 获取图片base64链接

var image = this.thisCancas.toDataURL(‘image/png‘)

_this.imgSrc = image

this.onUpload()

// _this.fileList = [{ name: ‘food.jpg‘, url: image }]

// this.$refs.upload.submit()

this.$emit(‘refreshDataList‘, this.imgSrc)

},

onUpload() {

if (this.imgSrc) {

const file = this.imgSrc // 把整个base64给file

const 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)

const options = {

method: ‘POST‘, // 请求方法

body: data, // 请求体

headers: this.headers

}

this.loading = true

fetch(‘http://47.99.204.99:8000/api/workerEntryExit/uploadAvatar‘, options)

.then((response) => {

return response.json()

})

.then((responseText) => {

this.fileList = [{ name: ‘人脸采集‘, url: responseText.avatar }]

this.form.issueCardPic = responseText.avatar

})

.catch((error) => {

this.loading = false

this.$notify.error({

title: ‘上传失败‘,

message: error.msg

})

})

} else {

this.$notify({

title: ‘警告‘,

message: ‘请点击拍照‘,

type: ‘warning‘

})

}

},

// base64转文件

dataURLtoFile(dataurl, filename) {

var arr = dataurl.split(‘,‘)

var mime = arr[0].match(/:(.*?);/)[1]

var bstr = atob(arr[1])

var n = bstr.length

var u8arr = new Uint8Array(n)

while (n--) {

u8arr[n] = bstr.charCodeAt(n)

}

return new File([u8arr], filename, { type: mime })

},

// 关闭摄像头

stopNavigator() {

this.thisVideo.srcObject.getTracks()[0].stop()

}

}

}