前言

一款智能水印相机,拍照自动添加时间、地点、经纬度等水印文字,可用于工作考勤、学习打卡、工作取证等,支持自定义内容以及给现有照片添加水印。无需安装,无需注册,即开即用。

原理

主要是通过canvas给图片上添加上时间水印地点信息。首先通过官方API(chooseLocation)获取到位置信息,然后利用JS获取本地时间,最后绘制到canvas上通过canvasToTempFilePath生成图片。

获取位置信息

这个接口在去年开始就需要用户手动申请,在小程序管理页面申请,如果申请按钮无法点击,在提交代码时会弹窗申请弹窗,之后就可以申请了。通过后才可以上线小程序。代码如下:

/*** 获取地址信息
*/getLocation: function () {wx.getLocation({success: res => {qqmapsdk.reverseGeocoder({location: {latitude: res.latitude,longitude: res.longitude},success: res => {let address = res.result.address;this.setData({address})}})}})},/*** 手动选择地点*/chooseLocation: function () {wx.chooseLocation({success: res => {console.log(res)this.setData({address: res.address})},fail: err => {console.log(err)}})}

其中qqmapsdk使用的是腾讯位置服务的sdk,需要去官方下载并申请key,然后再页面中加上如下代码:


var QQMapWX = require('../../libs/qqmap-wx-jssdk.js');
var qqmapsdk = new QQMapWX({key: '' // 这里填写你的key
});

获取时间信息

时间信息就很简单了,这里给大家提供封装了一下,如下代码:


export const formatTime = () => {const date = new Date();const year = date.getFullYear()const month = date.getMonth() + 1const day = date.getDate()const weekDay = ['日', '一', '二', '三', '四', '五', '六'][date.getDay()]const hour = date.getHours()const minute = date.getMinutes()const second = date.getSeconds()return {date: [year, month, day].map(formatNumber).join('-'),time:[hour, minute, second].map(formatNumber).join(':'),week: '星期'+weekDay}
}const formatNumber = (n) => {const s = n.toString()return s[1] ? s : '0' + s
}

绘制图片

这里说明一下,目前 wx.createCanvasContext接口以及弃用了,所以我们采用Canvas.getContext代替,首先我们需要添加canvas,在wxml页面中添加如下代码,一定要设置好宽高,可以是动态的,但是必须设定好,不然很容易出现画面模糊的问题。

<canvas type="2d" id="canvas" style="position: fixed; top: -10000px; left: -10000px; width: {{canvasWidth}}px;height: {{canvasHeight}}px;"></canvas>

然后动态设置宽高可以根据相机或者图片的宽高自定设置,然后我们将时间、位置和图片等信息一起绘制在canvas上。


/*** 给图片添加水印*/addWatermark: function (imageUrl) {console.log(imageUrl)return new Promise((resolve, reject) => {wx.showLoading({title: '图片生成中...',})const query = wx.createSelectorQuery();query.select('#canvas').fields({node: true,size: true}).exec((res) => {console.log(res)const canvas = res[0].node;const ctx = canvas.getContext('2d');const dpr = wx.getSystemInfoSync().pixelRatio;const {canvasWidth,canvasHeight} = this.data;canvas.width = canvasWidth * 1.5canvas.height = canvasHeight * 1.5ctx.scale(1.5, 1.5)// 绘制背景图片const image = canvas.createImage();image.onload = () => {ctx.drawImage(image, 0, 0, canvasWidth, canvasHeight);ctx.font = 'normal 28px null';ctx.fillStyle = '#ffffff';ctx.textBaseline = 'bottom';// 绘制地址ctx.fillText(this.data.address, 20, canvasHeight - 20);// 绘制时间ctx.fillText(this.data.date + ' ' + this.data.time, 20, canvasHeight - 65);// 绘制星期ctx.fillText(this.data.week, 20, canvasHeight - 115);wx.canvasToTempFilePath({canvas,success: (res) => {wx.hideLoading()resolve(res.tempFilePath);},fail: () => {wx.hideLoading()reject(new Error('转换为图片失败'));}});}image.src = imageUrl;});});},

这里直接用Promise封装了一下,方便调用。其中iamgeUrl为相机的照片或者用户自己上传的图片地址。

以上就是大致的流程,具体如何操作,可以看我开源的智能水印相机的代码:

Github下载地址

Gitee下载地址

微信小程序实战:智能水印相机小程序开发附源码相关推荐

  1. 程序员如何用“心“表白(结尾附源码)

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

  2. 01 【Verilog实战】同步FIFO的设计(附源码RTL/TB)

    虚拟机:VMware -14.0.0.24051 环 境:ubuntu 18.04.1 脚 本:makefile(点击查看) 应用工具:vcs 和 verdi 写在前面 这个专栏的内容记录的是个人学习 ...

  3. 微信聊天防封 亲测 百分之95有效 【附源码】

    微信聊天防封 亲测 百分之95有效 [附源码] 把你想发给某一个人的"一句话改变成一张图片"" 并在文字的外围加上框,来实现防封 默认快捷键AIt+Q ,可以隐藏或显示主 ...

  4. Java毕设项目智能快递分拣系统计算机(附源码+系统+数据库+LW)

    Java毕设项目智能快递分拣系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  5. Android 小项目之--数据存储【Files】(附源码)

    继上篇数据存储,现在我们来讲讲另外一种数据存储,Files.本篇讲述步骤如下: 1.温故而知新,复习四种数据存储的区别. 2.什么是 Files 数据存储. 3.什么是 Properties ? 4. ...

  6. 分享30个有趣的 Python小游戏,我能玩一天(附源码)

    大家好,今天给大家带来30个 Python 小游戏,喜欢记得点赞.一定要收藏! 文章目录 有手就行 1.吃金币 2.打乒乓 3.滑雪 4.并夕夕版飞机大战 5.打地鼠 简简单单 6.小恐龙 7.消消乐 ...

  7. SSM+微信小程序网易云音乐设计与实现 毕业设计-附源码261620

    基于SSM微信小程序的网易云音乐 摘  要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,微信小程序 ...

  8. SSM+mysql+微信小程序网易云音乐设计与实现 毕业设计-附源码261620

    基于SSM微信小程序的网易云音乐 摘  要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,微信小程序 ...

  9. 微信小程序网易云音乐设计与实现 毕业设计-附源码261620

    基于SSM微信小程序的网易云音乐 摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,微信小程序的 ...

最新文章

  1. 移植opencv2.4.9到itop4412开发板
  2. 职场信念:人生的12种财富(转帖)
  3. Detectron2学习笔记
  4. python 打印xml文档树_Python构建XML树结构的方法示例
  5. 高斯消元(二)——竞赛题目中异或和的高斯消元
  6. linux 抓包工具_03-Python爬虫工程师-抓包工具
  7. Linux定时删除过期日志文件
  8. 深度优先搜索(DFS)与广度优先搜索(BFS) -- 总结
  9. JetBrains(Intellij, pycharm)多行编辑模式
  10. 几种常见的跨域原理的实现
  11. cmpp具体java实例_cmpp3.0_JAVA_实现 - 源码下载|Windows编程|源代码 - 源码中国
  12. 【AI视野·今日CV 计算机视觉论文速览 第175期】Fri, 10 Jan 2020
  13. 筋斗云接口编程 / 常用操作(二)
  14. 按头安利 好看又实用的运动健身 体育海报模板素材看这里
  15. python学习——廖雪峰网站
  16. python视频教程大全集下载啦!超级全的教程!
  17. springboot源码: springboot初始化过程
  18. 手把手教你实现一个抽奖系统!
  19. 在Linux环境下使用OTPS工具箱提取TPXO9海潮模型数据作潮汐水位预报
  20. w8ndows 秒表,Win8开机时间:机械硬盘堪比SSD_固态硬盘评测-中关村在线

热门文章

  1. 智能零售柜商品检测软件(Python+YOLOv5深度学习模型+清新界面)
  2. Docker 基础入门篇(上)
  3. Windows系统谷歌浏览器Chrome检查更新时出错:无法启动更新检查(错误代码为 4: 0x80070005 -- system level)
  4. 13 WEB漏洞:SQL注入之MYSQL注入
  5. mysql两个条件group_group by 两个或以上条件的分析
  6. 信息处理技术员具备的知识
  7. 英国政府:打造世界AI强国的18个建议(附报告下载)
  8. 阿里园区竟然开了一家微笑就可以打折的店
  9. c语言 fgets用法,fgets和fputs的用法详解
  10. 大揭秘!亲历“恐怖”的阿里一面