实现功能和适用业务

  1. 采集本地摄像头获取摄像头画面,拍照保存,上传服务器;
  2. 前端上传图片处理,展示,缩小,裁剪,上传服务器

实现步骤

  1. 调取本地摄像头(getUserMedia)/上传图片,将图片/视频显示在浏览器上
  2. 拍照/转换 将视频拍照或是将图片展示在canvas中
  3. 将canvas中的图像,转换成图片格式(png,jpg等)上传到服务器

上述两种方式涉及到的格式转换分别为:
获取摄像头: 摄像头视频流(blob)-> canvas 图像 -> blob 图片 上传服务器
图片上传: 上传的图片(file) -> base64图片 -> canvas 图像 -> blob 图片 上传服务器
具体获取摄像头的方法可以参考:https://segmentfault.com/a/11...

相关的格式转换下:

canvas转换为dataURL (从canvas获取dataURL)

var dataurl = canvas.toDataURL('image/png');
var dataurl2 = canvas.toDataURL('image/jpeg', 0.8);

File对象转换为dataURL、Blob对象转换为dataURL

File对象也是一个Blob对象,二者的处理相同。

function readBlobAsDataURL(blob, callback) {var a = new FileReader();a.onload = function(e) {callback(e.target.result);};a.readAsDataURL(blob);
}
//example:
readBlobAsDataURL(blob, function (dataurl){console.log(dataurl);
});
readBlobAsDataURL(file, function (dataurl){console.log(dataurl);
});

dataURL图片数据绘制到canvas

先构造Image对象,src为dataURL,图片onload之后绘制到canvas

var img = new Image();
img.onload = function(){canvas.drawImage(img);
};
img.src = dataurl;

File,Blob的图片文件数据绘制到canvas

还是先转换成一个url,然后构造Image对象,src为dataURL,图片onload之后绘制到canvas

利用上面的 readBlobAsDataURL 函数,由File,Blob对象得到dataURL格式的url,再参考 dataURL图片数据绘制到canvas

readBlobAsDataURL(file, function (dataurl){var img = new Image();img.onload = function(){canvas.drawImage(img);};img.src = dataurl;
});

Canvas转换为Blob对象并使用Ajax发送

转换为Blob对象后,可以使用Ajax上传图像文件。

先从canvas获取dataurl, 再将dataurl转换为Blob对象

var dataurl = canvas.toDataURL('image/png');
var blob = dataURLtoBlob(dataurl);
//使用ajax发送
var fd = new FormData();
fd.append("image", blob, "image.png");
var xhr = new XMLHttpRequest();
xhr.open('POST', '/server', true);
xhr.send(fd);

Canvas 转换成 Blob格式

  1. 可以通过 Canvas.toDataUrl 转换成 DataUrl(base64) 再转成 blob
  2. 可以直接转成blob,可以通过canvas.toBlob转换。然toBlob方法的浏览器兼容性不是很好,存在兼容性问题,幸运的是已有前人封装好了toblob方法,直接拿来用就好了,适用于pc端和移动端
    地址:https://github.com/qiyubu/Jav...

具体过程和相关参考资料:
http://www.zhangxinxu.com/wor...
http://blog.csdn.net/cuixipin...
https://segmentfault.com/a/11...

HTML5调用本地摄像头画面,拍照,上传服务器相关推荐

  1. Electron应用中实现调用外接摄像头并拍照上传

    背景 基于Electron实现的pc端智能验机应用,近期迭代了一个新的功能,需求是通过电脑外接摄像头对手机屏幕进行拍照,拍照后需将照片上传至服务端进行屏幕信息比对,确定被检测屏幕是否为原厂屏. 需求分 ...

  2. 在网页中调用摄像头实现拍照上传 - 高拍仪二次开发

    在网页中调用摄像头实现拍照上传 高拍仪二次开发     在一些公共部门的办事处,比如银行.护照办理中心.税务等,我们可能会注意到办公桌上摆着这样一台机器.办公人员用它拍摄各种证件.文件.表格,有时候还 ...

  3. c++ 二次开发 良田高拍仪_在网页中调用摄像头实现拍照上传 - 高拍仪二次开发...

    来源于  https://blog.csdn.net/weixin_40659738/article/details/78252562 在网页中调用摄像头实现拍照上传 高拍仪二次开发 在一些公共部门的 ...

  4. vue调用本地摄像头实现拍照

    前言: vue调用本地摄像头实现拍照功能,由于调用摄像头有使用权限,只能在本地运行,线上需用https域名才可以使用. 实现效果: 1.摄像头效果: 2.拍照效果: 实现代码: <templat ...

  5. IE与非IE浏览器调用PC摄像头拍摄并且上传

     需要下载源码以及相关文件的可以到(不好意思,之前上传的不知道怎么回事就没了) http://download.csdn.net/detail/u013946285/9886280 中下载 一,f ...

  6. php h5 调用摄像头_利用html5调用本地摄像头拍照上传图片

    [php]代码库html5概念啥的就不废话了,不知道的 百度, 谷歌一堆..今天学了学html5中的Canvas结合新增的标签来获取本地摄像头,在html5之前,要在浏览器获取本地摄像头只有通过插件( ...

  7. chrome摄像头java_Chrome 谷歌浏览器调用摄像头并拍照上传 java示例

    html页面: html5调用摄像头实现拍照 拍照 var video=document.getElementById("video"); var context=canvas.g ...

  8. 前端调用本地摄像头实现拍照(vue)

    由于调用摄像头有使用权限,只能在本地运行,线上需用https域名才可以使用. <template><div class="camera_outer">< ...

  9. pandorabox php,Openwrt Pandorabox 挂载摄像头 定时拍照上传百度网盘,实现实时监控(优酷路由宝)...

    事情是这样的:三四年前为了实现一个200米左右的组网,到anywlan 恩山 Openwrt论坛等等学习了各种路由器固件,期间玩过基于Openwrt的wifi小车. 玩过一些路由器  DB120 网件 ...

最新文章

  1. int与string转换
  2. linux 获取cpu id,linux获取cpu id和disk id
  3. win8系统ghost后只有一个盘了其它分区的文件如何找回
  4. Hejr 6-8 - aamsaafanqs Blog - Blogster
  5. 微信测试号开发 服务器 token验证
  6. 对于spring的一些巩固一些难点的理解 2021-04-18
  7. RHEL6.2上使用 libvirt创建和管理KVM虚拟机
  8. 黄聪:Linq初级班 Linq To XML体验(编程篇)
  9. 基金侧袋机制: 指引与操作规范
  10. linux怎么把dos改成unix_Linux命令之dos2unix – 将DOS格式文本文件转换成UNIX格式
  11. 主机window7 64位 虚拟机下安装Ubuntu系统如何实现网络共享ixi
  12. 模拟一个简单的购房商贷月供计算器,按照总利息和每月还款金额
  13. 邢质斌退休意味着一个时代的结束
  14. 中国未来可能面临的第四次失业浪潮
  15. android自定义导航,Android 高德地图之自定义导航
  16. A FastDetectionMethodviaRegion-BasedFullyConvolutionalNeuralNetworksforShieldTunnelLiningDefects-笔记
  17. 前端使用pdf.js插件在线浏览pdf
  18. ae2018怎么打开2019_ae2018中英文切换的方法
  19. 1. R语言介绍、Rstudio的基本使用、帮助命令、内置数据集
  20. 计算机片段教学优秀教案,高中数学片段教学方法

热门文章

  1. MyBatis-Plus,搭配 Spring Boot 使用,一篇就够了
  2. 带你100% 地了解 Redis 6.0 的客户端缓存
  3. 干货 | 阿里巴巴混沌测试工具ChaosBlade两万字解读
  4. ​【特征工程】时序特征挖掘的奇技淫巧
  5. ICCV 2021 | 国科大提出首个CNN和Transformer双体主干网络!Conformer准确率高达84.1%!...
  6. 清华校长俯身拨穗!曾收病危通知书的博士毕业,刷屏的却是这个人
  7. 【干货】CNN与Transformer的强强联合!谷歌最新开源BoTNet,ImageNet达84.7%准确率
  8. ECCV2020|超快的车道线检测,代码模型已开源
  9. 几篇较新的计算机视觉Self-Attention
  10. 90后教授:回国是用数学计算出的“最优解”