我的网站开发技术经验总结 我的网站开发技术经验总结
首页

fangdown

我的网站开发技术经验总结
首页
  • 认识ESM
  • chrome-talend插件,类似postman
  • sequelize 使用及技巧
  • UML工具Power Designer建表
  • sequelize相关操作文档
  • 解决抖音获取签名及并发的问题
  • 记一次解决抖音分享页混淆字体,字体图标转UID解决方案
  • 获取抖音用户作品列表信息
  • 获取抖音用户作品列表信息-进阶
  • 获取抖音用户作品列表信息-进阶3
  • 如何根据抖音号获取用户信息
  • 获取用户最新视频
  • 模块化-import和require的区别
  • eslint规范
  • js容错处理
  • js-数组分组,执行promise
  • reduce使用遇到的问题
  • 正则匹配html的元素内容
  • taro 小程序 弹窗层禁止底部滚动
  • 公众号签名问题
  • CentOS7中MariaDB重置密码
  • nginx多域名配置
  • node访问接口,得到乱码的结果,原因-Accept-Encoding
  • node写文件到json中
  • node抓取html内容
  • Node.js使用ES6语法
  • express 使用cors中间件解决跨域
  • node + express + session + redis 进行持久化缓存
  • node中读取文件夹,获取文件名称
  • pm2常用命令
  • 使用pm2管理后台node服务
  • typescript puppeteer支持window及document属性
  • node读取json文件
  • node中使用redis缓存
  • node + github的webhook完成自动部署
  • vuepress-blog的性能优化-CDN
  • CENTOS7下安装REDIS
  • promise then和catch的学习和使用
  • promise在循环中的串行并行用法
  • puppeteer常用知识
  • centos部署安装puppeteer
  • python的学习和使用
  • Taro+TypeScript - Mobx实践
  • 爬虫系列 --- 反爬机制和破解方法汇总
  • 安全-html转码
  • taro中使用animation动画
  • charles 使用
  • Mac下VSCode设置iTerm2终端样式
  • centos一步步完成站点部署
  • 云闪付做地铁的思路
  • 准备技能
  • 备案pc项目介绍
  • 备案小程序项目介绍
  • 小程序二维码扫码功能
  • 小程序域名组件开发
  • 小程序添加水印
    • 小程序添加水印
      • 需求
      • 分析
      • 解决
      • 坑 在开发中遇到的问题
      • 学习
  • 规则引擎优化
  • 记一次hooks代替redux的经历
  • 通过nodejs+koa+stream进行服务端图片代理
  • nodeJs接入log4j日志
  • nodejs+typescript项目中添加全局global属性
  • create-react-app 安装 bizcharts 项目崩溃
  • 使用MutationObserver监控dom的变化
  • 服务器重启后启动相关服务
  • moment国际化的问题
  • 项目经验
fangdown
2020-10-27
目录

小程序添加水印

# 小程序添加水印

# 需求

需在小程序中把图片增加水印功能

# 分析

  1. 把图片用 canvas 增加水印

# 解决

  1. 在组件中监听图片引用值变化,进行相应转换
Component({
  behaviors: ['wx://form-field'],

  properties: {
    url: {
      type: String,
      value: '',
      async observer(value: string) {
        const relativeUrl = await waterMark(this, 'idcard-back-canvas', value, '仅用来实名认证');
        const waterMarkUrl = await API.getCosImageURL(relativeUrl);
        this.setData({ waterMarkUrl });
      }
  1. 抽象增加水印方法
/**
 * 添加水印功能
 * @param context  上下文this
 * @param canvasId canvas-id
 * @param imgUrl 图片网络地址
 * @param markText 水印文案
 */
export const waterMark = async (
  context: any,
  canvasId: string,
  imgUrl: string,
  markText: string
) => {
  return new Promise((resovle, reject) => {
    wx.getImageInfo({
      src: imgUrl,
      success: (ress: any) => {
        logs.all("下载图片成功");
        // 在组件中使用, 需要传值上下文context
        let ctx = wx.createCanvasContext(canvasId, context);
        const { path, width: cavWidth, height: cavHeight } = ress;
        context.setData({ cavWidth, cavHeight });
        //将图片src放到cancas内,宽高为图片大小
        ctx.drawImage(path, 0, 0, cavWidth, cavHeight);
        // 设置中心原点并倾斜
        ctx.translate(cavWidth / 2, cavHeight / 2);
        ctx.rotate((-45 * Math.PI) / 180);
        ctx.setFontSize(48);
        ctx.setFillStyle("#eeeeee");
        ctx.fillText(markText, -160, 0);
        ctx.draw(false, () => {
          wx.canvasToTempFilePath(
            {
              x: 0,
              y: 0,
              width: cavWidth,
              height: cavHeight,
              destWidth: cavWidth,
              destHeight: cavHeight,
              canvasId: canvasId,
              success: async (res) => {
                logs.all("导出图片成功");
                const markedUrlPath = res.tempFilePath;
                const { result: markedUrl } = await API.uploadImage(
                  markedUrlPath,
                  false
                );
                resovle(markedUrl);
              },
              fail(res) {
                logs.all("导出图片失败", JSON.stringify(res));
                reject(JSON.stringify(res));
              },
            },
            context
          );
        });
      },
    });
  });
};

# 坑 在开发中遇到的问题

  1. canvas 不显示 原因:组件中使用 canvas,需增加 this 参数

  2. canvasToTempFilePath 报错 原因:组件中使用 canvas,需增加 this 参数

# 学习

  1. 学会了 canvas 的 drawImage、rorate、translate 方法
  2. 学会了增加水印功能
#技能
上次更新: 2021/12/19, 18:05:42
小程序域名组件开发
规则引擎优化

← 小程序域名组件开发 规则引擎优化→

最近更新
01
多分支修复撞车的问题
05-01
02
如何成为架构师
01-23
03
服务器部署全过程
11-23
更多文章>
Theme by Vdoing | Copyright © 2019-2026 fangdown | 粤ICP备19079809号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式