flash jquery 调用摄像头 vue chrome49浏览器
flash jquery 调用摄像头 vue chrome49浏览器
这个摄像头,不能一个页面加载多个,只能一个页面显示一次,所以 调用的时候,记得加v-if 把组件销毁,然后从新加载新的
<!--
* @description 摄像头vue版实例
* @fileName cameraObject.vue
* @author 彭成刚
* @date // ::
* @version V1.0.0
!-->
<template>
<div> <div id="webcam"></div>
<!--<button @click="jieping">截屏</button>-->
<div style="color:red; margin: 10px;">点击即可启用 Adobe Flash Player(拍照功能将启用Flash,第一次启用将会刷新页面,导致数据丢失,建议返回表单页面保存数据后开启拍照功能。)</div> <Button type='primary'
@click="handleCamera"
style="margin-bottom:5px; margin-right:5px;">拍照</Button><!--icon="md-camera"-->
<Button type='warning'
@click="leftRotate"
:disabled="buttonDisabled"
style="margin-bottom:5px; margin-right:5px;">逆旋转</Button>
<Button type='warning'
@click="rightRotate"
:disabled="buttonDisabled"
style="margin-bottom:5px;">正旋转</Button>
<!--<canvas id="canvas" width="" height=""></canvas>-->
<div>
<img ref="img" id="base64image" src='' />
</div>
</div>
</template> <script>
import jQuery from '@/../public/components/webcam/jquery.webcam'
export default {
data () {
return {
buttonDisabled: true,
timer: new Date().getTime().toString(),
picIsHave: false
}
}, components: {}, computed: {}, mounted () {
let _this = this
var pos = , ctx = null, saveCB, image = []; var canvas = document.createElement("canvas");
canvas.setAttribute('width', );
canvas.setAttribute('height', ); if (canvas.toDataURL) { ctx = canvas.getContext("2d"); image = ctx.getImageData(, , , ); saveCB = function(data) {
// console.info('data', data) var col = data.split(";");
var img = image; for(var i = ; i < ; i++) {
var tmp = parseInt(col[i]);
img.data[pos + ] = (tmp >> ) & 0xff;
img.data[pos + ] = (tmp >> ) & 0xff;
img.data[pos + ] = tmp & 0xff;
img.data[pos + ] = 0xff;
pos+= ;
} if (pos >= * * ) {
ctx.putImageData(img, , )
var base64 = canvas.toDataURL("image/png")
// console.info('canvas.toDataURL("image/png")',)
// document.getElementById('base64image').attributes('src',base64)
console.info('_this',_this)
jQuery('#base64image').attr('src',base64)
_this.buttonDisabled = false
// $.post("/upload.php", {type: "data", image: canvas.toDataURL("image/png")});
pos = ;
}
}; } else { saveCB = function(data) {
console.info('data2',data)
image.push(data); pos+= * ; if (pos >= * * ) {
console.info('data2 ok')
// $.post("/upload.php", {type: "pixel", image: image.join('|')});
pos = ;
}
};
} jQuery("#webcam").webcam({ width: ,
height: ,
mode: "callback",
swffile: "/familyMajor_web/components/webcam/jscam_canvas_only.swf", onSave: saveCB, onCapture: function () {
webcam.save();
}, debug: function (type, string) {
console.log(type + ": " + string);
}
});
}, methods: {
// 外层调用
getPicBase64 () {
let base64 = this.$refs.img.src
let ret = {
picIsHave: this.picIsHave,
base64: base64
}
return ret
},
handleCamera () {
this.picIsHave = true
webcam.capture()
},
leftRotate () {
let src = this.$refs.img.src
let edg = -
this.rotateBase64Img(src, edg, (_) => { this.$refs.img.src = _ })
},
rightRotate () {
let src = this.$refs.img.src
let edg =
this.rotateBase64Img(src, edg, (_) => { this.$refs.img.src = _ })
},
rotateBase64Img (src, edg, callback) {
var canvas = document.createElement('canvas')
var ctx = canvas.getContext('2d') var imgW // 图片宽度
var imgH // 图片高度
var size // canvas初始大小 if (edg % !== ) {
console.error('旋转角度必须是90的倍数!')
// throw '旋转角度必须是90的倍数!'
}
(edg < ) && (edg = (edg % ) + )
const quadrant = (edg / ) % // 旋转象限
const cutCoor = { sx: , sy: , ex: , ey: } // 裁剪坐标 var image = new Image()
image.crossOrigin = 'anonymous'
image.src = src image.onload = function () {
imgW = image.width
imgH = image.height
size = imgW > imgH ? imgW : imgH canvas.width = size *
canvas.height = size *
switch (quadrant) {
case :
cutCoor.sx = size
cutCoor.sy = size
cutCoor.ex = size + imgW
cutCoor.ey = size + imgH
break
case :
cutCoor.sx = size - imgH
cutCoor.sy = size
cutCoor.ex = size
cutCoor.ey = size + imgW
break
case :
cutCoor.sx = size - imgW
cutCoor.sy = size - imgH
cutCoor.ex = size
cutCoor.ey = size
break
case :
cutCoor.sx = size
cutCoor.sy = size - imgW
cutCoor.ex = size + imgH
cutCoor.ey = size + imgW
break
} ctx.translate(size, size)
ctx.rotate(edg * Math.PI / )
ctx.drawImage(image, , ) var imgData = ctx.getImageData(cutCoor.sx, cutCoor.sy, cutCoor.ex, cutCoor.ey)
if (quadrant % === ) {
canvas.width = imgW
canvas.height = imgH
} else {
canvas.width = imgH
canvas.height = imgW
}
ctx.putImageData(imgData, , )
callback(canvas.toDataURL())
}
} }
} </script>
<style lang='less'> </style>
flash jquery 调用摄像头 vue chrome49浏览器的更多相关文章
- 使用vue做移动app时,调用摄像头扫描二维码
现在前端技术发展飞快,前端都能做app了,那么项目中,也会遇到调用安卓手机基层的一些功能,比如调用摄像头,完成扫描二维码功能 下面我就为大家讲解一下,我在项目中调用这功能的过程. 首先我们需要一个中间 ...
- vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式
进入正题 1. PC端调用摄像头拍照上传base64格式到后台,这个没什么花里胡哨的骚操作,直接看代码 (canvas + video) <template> <div> &l ...
- html5调用摄像头并拍照
随着flash被禁用,flash上传附件的方式已成为过去,现在开始用html5上传了.本片文章就是介绍如何使用html5拍照,其实挺简单的原理: 调用摄像头采集视频流,利用canvas的特性生成bas ...
- jQuery 调用jsonp实现与原理
jQuery 调用jsonp实现与原理 您的评价: 收藏该经验 阅读目录 1.客户端代码 2.服务器端 通过jQuery实现JSONP 一般的ajax是不能跨域请求的,因此需要使 ...
- HTML之调用摄像头实现拍照和摄像功能
应该有很多人知道,我们的手机里面有个功能是“抓拍入侵者”,说白了就是在解锁应用时如果我们输错了密码手机就会调用这一功能实现自动拍照. 其实在手机上还有很多我们常用的软件都有类似于这样的功能,比如微信扫 ...
- web HTML5 调用摄像头的代码
最近公司要求做一个在线拍照的功能,具体代码如下: <html> <head> <title>html5调用摄像头拍照</title> <style ...
- VS2010中使用Jquery调用Wcf服务读取数据库记录
VS2010中使用Jquery调用Wcf服务读取数据库记录 开发环境:Window Servere 2008 +SQL SERVE 2008 R2+ IIS7 +VS2010+Jquery1.3.2 ...
- 抛弃WebService,在.NET4中用 jQuery 调用 WCF
在我们之前的开发中,对于ajax程序,都是通过jQuery调用标记为[System.Web.Script.Services.ScriptService]的WebService,然后在WebServic ...
- [转]html5调用摄像头实例
原文:https://blog.csdn.net/binquan_liang/article/details/79489989 最近在学习在做HTML5的项目,看了博客上html5调用摄像头拍照的文章 ...
随机推荐
- 读取静态Json文件
创建web项目: string Json = string.Empty; string filePath = Server.MapPath("/***.json");//根目录下的 ...
- MVC+Linq+EF笔记
using (DataContext ctx = new DataContext()) { /*foreach (var item in ctx.employees) { ViewData[" ...
- Go语言调度器之盗取goroutine(17)
本文是<Go语言调度器源代码情景分析>系列的第17篇,也是第三章<Goroutine调度策略>的第2小节. 上一小节我们分析了从全局运行队列与工作线程的本地运行队列获取goro ...
- 2014 Noip提高组 Day2
P2038 无线网络发射器选址 [题目描述] 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 ...
- [Xcode 实际操作]六、媒体与动画-(11)UIView视图卷曲动画的制作
目录:[Swift]Xcode实际操作 本文将演示UIView视图卷曲动画的制作. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit cla ...
- C 语言实例 - 判断奇数/偶数
C 语言实例 - 判断奇数/偶数 C 语言实例 C 语言实例 以下实例判断用户输入的整数是奇数还是偶数. 实例 #include <stdio.h> int main() { int nu ...
- CF1141F Same Sum Blocks(easy/hard)
传送门easy 传送门hard 切水题的感觉真好 看到数据范围这么小,所以暴力枚举所有的可能,然后用map+vector存下每种值的区间,然后贪心去选 代码: #include<cstdio&g ...
- day8文件操作作业详解
1.day8题目 1,有如下文件,a1.txt,里面的内容为: 老男孩是最好的培训机构, 全心全意为学生服务, 只为学生未来,不为牟利. 我说的都是真的.哈哈 分别完成以下的功能: a,将原文件全部读 ...
- 51nod 1515 明辨是非 并查集+set维护相等与不等关系
考试时先拿vector瞎搞不等信息,又没离散化,结果好像MLE:后来想起课上讲过用set维护,就开始瞎搞迭代器...QWQ我太菜了.. 用并查集维护相等信息,用set记录不相等的信息: 如果要求变量不 ...
- python大战机器学习——数据降维
注:因为公式敲起来太麻烦,因此本文中的公式没有呈现出来,想要知道具体的计算公式,请参考原书中内容 降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中 1.主成分分析(PCA) 将n ...