热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

实际项目移动端调用摄像头获取照片加水印

H5移动端打开摄像头和打开相册参考文档:http:www.html5plus.orgdoczh_cncamera.html!!ÿ

H5移动端打开摄像头和打开相册

参考文档:http://www.html5plus.org/doc/zh_cn/camera.html
!!!plus在PC端运行时会报错,只有打包后在手机端运行时才能运行

//选择打开摄像头还是打开相册takePhoto(){let that = this;let bts = [{title: "拍照"},{title: "从相册选择"}];plus.nativeUI.actionSheet({cancel: "取消",buttons: bts},function(e) {if (e.index == 1) {that.getCamera();} else if (e.index == 2) {that.getImg();}});},
//打开摄像头
getCamera(){let that = this;let cmr = plus.camera.getCamera();//这里配置其实不起作用let res = cmr.supportedImageResolutions[14];let fmt = cmr.supportedImageFormats[0];cmr.captureImage(function(path){//获取拍照后的真实地址plus.io.resolveLocalFileSystemURL(path,function(entry) {//通过URL参数获取目录对象或文件对象console.log("拍照获取的真实路径",entry.fullPath)that.takeImgs.push(entry.fullPath);//直接可以显示的类型var imgSrc = entry.toLocalURL();//获取目录路径转换为本地路径URL地址console.log("imgSrcimgSrc",imgSrc)that.takeImgSrc.push(imgSrc);//URL地址型方便于转换base64},function(e) {console.log(e.message);},{ resolution: res, format: fmt });})},//打开相册getImg(){let that = this;plus.gallery.pick(function(path) {that.takeImgs.push(path);that.takeImgSrc.push(path);},function(e) {console.log("取消选择图片");},{ filter: "image" });},

以上就是如何在移动端打开摄像头和相册获取照片的方式。但是在实际项目可能后端想要的图片格式是不确定的,可能是base64.可能是file文件对象,所以我们要对获取到的照片处理成相对应的格式

/* 照片转码成base64加上时间水印 */getBase64Time(url){let that &#61;this;return new Promise((resolve,reject)&#61;>{//异步处理let canvas &#61; document.createElement("canvas"),ctx &#61; canvas.getContext("2d"),image &#61; new Image(),fontSize,//水印的大小MAX_WH &#61; 800;//图片的最大宽高比&#xff0c;因为在以上方法中获取的照片size太大&#xff0c;上传时耗时太多所以需要做处理image.crossOrigin &#61; "Anonymous";image.onload &#61; function() {//这里是一个异步&#xff0c;所以获取到的base64文件需要用回调if (image.height>MAX_WH) {image.width *&#61; MAX_WH/image.height;image.height &#61; MAX_WH}if (image.width>MAX_WH) {image.height *&#61; MAX_WH/ image.width;image.width &#61; MAX_WH;}canvas.height &#61; image.height;canvas.width &#61; image.width;ctx.drawImage(image, 0, 0,image.width,image.height);if(image.width>100 && image.width<500){fontSize &#61; &#39;24px&#39;}else if(image.width>&#61;500 && image.width<1000){fontSize &#61; &#39;44px&#39; }else if(image.width>&#61;1000 && image.width<1500){fontSize &#61; &#39;64px&#39;}ctx.font &#61;&#96;${fontSize} Arial&#96;;ctx.fillStyle &#61; "tomato"; let time &#61; that.getCurrnetTime("timeSign");//获取当前的时间ctx.textAlign &#61; "end";ctx.textBaseline &#61; "middle";ctx.fillText(time,image.width-20,image.height-60);let dataURL &#61; canvas.toDataURL( "image/png/jpg"); if(dataURL) {resolve(dataURL)}else{reject("err")}};image.src &#61; url})},//调用此方法之后文件就转为base64格式了

如需要file文件格式&#xff0c;见https://blog.csdn.net/weixin_42307283/article/details/103613682


推荐阅读
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 使用jQuery与百度地图API实现地址转经纬度功能
    本文详细介绍了如何利用jQuery和百度地图API将地址转换为经纬度,包括申请API密钥、页面构建及核心代码实现。 ... [详细]
  • 在AngularJS中,有时需要在表单内包含某些控件,但又不希望这些控件导致表单变为脏状态。例如,当用户对表单进行修改后,表单的$dirty属性将变为true,触发保存对话框。然而,对于一些导航或辅助功能控件,我们可能并不希望它们触发这种行为。 ... [详细]
  • 我在尝试将组合框转换为具有自动完成功能时遇到了一个问题,即页面上的列表框也被转换成了自动完成下拉框,而不是保持原有的多选列表框形式。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • This article explores the process of integrating Promises into Ext Ajax calls for a more functional programming approach, along with detailed steps on testing these asynchronous operations. ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
  • 本文介绍了一种在 Android 开发中动态修改 strings.xml 文件中字符串值的有效方法。通过使用占位符,开发者可以在运行时根据需要填充具体的值,从而提高应用的灵活性和可维护性。 ... [详细]
  • 本文探讨了Android系统中联系人数据库的设计,特别是AbstractContactsProvider类的作用与实现。文章提供了对源代码的详细分析,并解释了该类如何支持跨数据库操作及事务处理。源代码可从官方Android网站下载。 ... [详细]
  • 本文探讨了如何通过JavaScript检测鼠标是否离开了浏览器窗口,包括使用原生方法和第三方库的不同解决方案。 ... [详细]
  • 2023年1月28日网络安全热点
    涵盖最新的网络安全动态,包括OpenSSH和WordPress的安全更新、VirtualBox提权漏洞、以及谷歌推出的新证书验证机制等内容。 ... [详细]
  • 来自FallDream的博客,未经允许,请勿转载,谢谢。一天一套noi简直了.昨天勉强做完了noi2011今天教练又丢出来一套noi ... [详细]
  • 题面:P3178[HAOI2015]树上操作好像其他人都嫌这道题太容易了懒得讲,好吧那我讲。题解:第一个操作和第二个操作本质上是一样的&# ... [详细]
  • HDU 2537 键盘输入处理
    题目描述了一个名叫Pirates的男孩想要开发一款键盘输入软件,遇到了大小写字母判断的问题。本文提供了该问题的解决方案及实现方法。 ... [详细]
author-avatar
天凉好个秋骄阳_213
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有