当前位置:首页 > uni-app

uniapp拍照加水印

2026-02-06 14:22:52uni-app

拍照功能实现

使用uniapp的uni.chooseImageuni.chooseMedia API调用系统相机或相册,支持多平台兼容。示例代码:

uni.chooseImage({
  count: 1,
  sourceType: ['camera'],
  success: (res) => {
    const tempFilePath = res.tempFilePaths[0];
    this.addWatermark(tempFilePath); // 调用加水印方法
  }
});

水印生成方案

Canvas绘制水印

  1. 创建Canvas画布,加载图片后绘制文字或图片水印:
    const ctx = uni.createCanvasContext('watermarkCanvas');
    ctx.drawImage(tempFilePath, 0, 0, width, height);
    ctx.setFontSize(20);
    ctx.fillText('水印文字', x, y);
    ctx.draw();

Base64水印叠加
通过uni.getFileSystemManager读取图片为Base64,使用第三方库(如canvas-tools)处理水印后保存:

const fs = uni.getFileSystemManager();
fs.readFile({
  filePath: tempFilePath,
  encoding: 'base64',
  success: (res) => {
    // 使用库处理Base64数据并添加水印
  }
});

水印样式配置

  • 文字水印:支持自定义字体、颜色、透明度(通过ctx.globalAlpha设置)
  • 图片水印:需预先准备PNG透明水印图,通过drawImage叠加
  • 平铺水印:循环计算坐标位置,重复绘制水印

保存与上传

使用uni.canvasToTempFilePath将Canvas转为图片,再通过uni.saveImageToPhotosAlbum保存到相册或调用上传接口:

uniapp拍照加水印

uni.canvasToTempFilePath({
  canvasId: 'watermarkCanvas',
  success: (res) => {
    uni.saveImageToPhotosAlbum({
      filePath: res.tempFilePath
    });
  }
});

注意事项

  • iOS系统需在manifest.json中配置相机和相册权限
  • Canvas在部分安卓机型可能存在兼容性问题,建议测试后调整绘制逻辑
  • 水印内容需符合法律法规,避免侵权风险

标签: 水印uniapp
分享给朋友:

相关文章

uniapp隐藏滚动条

uniapp隐藏滚动条

在UniApp中隐藏滚动条可以通过以下几种方法实现,具体根据使用场景选择: 全局样式设置(APP/H5) 通过修改全局CSS样式隐藏滚动条,适用于所有页面: ::-webkit-scrollbar…

uniapp部署到服务器

uniapp部署到服务器

部署准备 确保本地开发环境已完成项目构建,生成静态文件(H5端为/dist/build/h5目录)。检查服务器环境是否安装Nginx/Apache等Web服务软件,并配置好域名解析。 上传文件 通过…

uniapp多环境配置

uniapp多环境配置

多环境配置的必要性 在UniApp开发中,多环境配置能有效区分开发、测试、生产等不同环境的API地址、密钥等参数,避免手动修改代码导致的错误。 创建环境配置文件 在项目根目录下创建env.js或co…

uniapp组件

uniapp组件

uniapp组件基础概念 uniapp的组件系统基于Vue.js,支持跨平台开发(H5、小程序、App等)。组件分为内置基础组件(如<view>、<button>)和自定义组件…

uniapp 目录

uniapp 目录

uniapp 目录结构 uniapp 的目录结构遵循 Vue.js 项目的规范,同时包含一些特有的文件和目录。以下是典型的 uniapp 项目目录结构及其说明: project-name/ ├──…

uniapp get

uniapp get

uniapp 获取数据的方法 在 uniapp 中获取数据可以通过多种方式实现,包括 API 请求、本地存储、页面传参等。以下是一些常见的方法: API 请求获取数据 使用 uni.request…