首页 > 编程语言 >小程序,选择颜色,去水印

小程序,选择颜色,去水印

时间:2024-06-03 14:23:45浏览次数:28  
标签:startX startY 颜色 ctx 程序 水印 pixelData const imgUrl

// 在页面中添加一个 canvas 组件
<canvas canvas-id="myCanvas" bindtap="handleTap"></canvas>

// 在页面的 js 文件中处理图片
Page({
  data: {
    imgUrl: '', // 存储用户选择的图片路径
    startX: 0, // 用户指定区域的起始坐标X
    startY: 0, // 用户指定区域的起始坐标Y
    endX: 100, // 用户指定区域的结束坐标X
    endY: 100, // 用户指定区域的结束坐标Y
    replaceColor: '#ff0000', // 替换的颜色,默认为红色
  },

  chooseImage() {
    wx.chooseImage({
      success: (res) => {
        const imgUrl = res.tempFilePaths[0];
        this.setData({ imgUrl });
        this.removeWatermark(imgUrl);
      },
    });
  },

  handleStart(e) {
    // 记录用户选择区域的起始坐标
    this.setData({
      startX: e.touches[0].x,
      startY: e.touches[0].y,
    });
  },

  handleMove(e) {
    // 记录用户选择区域的结束坐标
    this.setData({
      endX: e.touches[0].x,
      endY: e.touches[0].y,
    });
  },

  handleTap(e) {
    const { x, y } = e.detail;
    this.getColorAtPoint(x, y);
  },

  getColorAtPoint(x, y) {
    const ctx = wx.createCanvasContext('myCanvas');
    const pixelData = ctx.getImageData(x, y, 1, 1).data;
    const color = `rgba(${pixelData[0]}, ${pixelData[1]}, ${pixelData[2]}, ${pixelData[3] / 255})`;
    console.log('Selected color:', color);

    // 将选取的颜色作为替换颜色
    this.setData({ replaceColor: color });
  },

  removeWatermark(imgUrl) {
    const { startX, startY, endX, endY, replaceColor } = this.data;
    const ctx = wx.createCanvasContext('myCanvas');
    ctx.drawImage(imgUrl, 0, 0, 300, 300); // 绘制原始图片

    // 在 canvas 上绘制指定区域
    ctx.setFillStyle(replaceColor); // 设置替换颜色
    ctx.fillRect(startX, startY, endX - startX, endY - startY); // 绘制用户指定的区域

    ctx.draw(false, () => {
      // 保存处理后的图片
      wx.canvasToTempFilePath({
        canvasId: 'myCanvas',
        success: (res) => {
          const tempFilePath = res.tempFilePath;
          console.log(tempFilePath); // 处理后的图片路径
        },
      });
    });
  },
});

标签:startX,startY,颜色,ctx,程序,水印,pixelData,const,imgUrl
From: https://www.cnblogs.com/Asuphy/p/18228796

相关文章

  • 解答 | 怎么消除SmartScreen程序安装警告
    先导在当前的网络时代,各种功能的软件应用程序参与到人们的生活和工作中,市场规模愈来愈大,增加了许多的开发公司和软件开发人员。但在发布应用程序后,软件所有者经常会遇到一个挑战,即用户在下载时可能会遇到微软SmartScreen提示“此应用程序不太常见,可能对您的电脑构成风险”,这种......
  • 定制预约咨询小程序:开发服务全解析
    一、前言    在这个数字化飞速发展的时代,每一个行业的老板和商家都在寻求更高效、更便捷的服务方式,以提升客户体验,增强自身竞争力。预约咨询小程序应运而生,它不仅为客户提供了极大的便利,更为商家打开了一扇全新的服务窗口。今天,就让我们一起深入解析这个预约咨询小程序......
  • 基于Matlab国外汽车牌照和颜色识别
    欢迎大家点赞、收藏、关注、评论啦,由于篇幅有限,只展示了部分核心代码。文章目录一项目简介二、功能三、系统四.总结一项目简介  一、项目背景与意义随着全球智能交通系统(ITS)的迅速发展,车牌识别和车辆颜色识别成为了该领域的重要技术。在国外的交通管理、......
  • 技术 or 管理?程序员如何做好职业规划?
    无论你是因为爱好才走上程序员这条路,还是因为收入而蠢蠢欲动,在职业生涯刚开始时恐怕都会面临很多疑虑:程序员真的能一直做下去吗?是不是30岁之后就干不动了?单靠写代码能走上管理岗位吗?管理岗和技术岗有哪些区别?如果做程序员太吃力,还有其他机会转行吗?大龄程序员的出路又在哪......
  • 新时代的程序员4大本领:lambda表达式,链式编程,函数式接口,Stream流式计算
    传统程序员4大本领:泛型,枚举,反射,注解新时代的程序员4大本领:lambda表达式,链式编程,函数式接口,Stream流式计算lambda表达式//1.不需要参数,返回值为5()->5//2.接收一个参数(数字类型),返回其2倍的值x->2*x//3.接受2个参数(数字),并返回他们的差值(x,y)->x......
  • java springboot基于Android平台的诗词学习系统APP小程序万字文档和PPT(源码+lw+部署
    前言......
  • 安心护送转运平台小程序软件系统介绍
    安心护送转运平台小程序安心护送转运平台小程序是一款基于FA+ThinkPHP+Uniapp开发的非急救救护车租用转运平台小程序系统,可以根据运营者的业务提供类似短途接送救护服务,重症病人转运服务,长途跨省护送服务。功能特性为你介绍安心护送转运平台小程序的功能特性Uniapp开发基......
  • 多平台租房系统小程序介绍
    多平台租房系统一款基于FA+ThinkPHP和Uniapp进行开发的多平台(目前适配H5,微信小程序)租房系统功能特性为你介绍多平台租房系统的功能特性多城市支持不同城市显示对应地区的房源出租房支持显示出租房源,房源可由前台注册用户或者后台发布预约看房支持用户预约看房海报分......
  • PTA-- 《面向对象程序设计》作业6--集合与容器
    目录6-1tjrac-Java集合类之List的ArrayList之增删改查 6-2tjrac-Java集合类之Map的HashMap之常用方法的使用  6-3tjrac-Java集合类之Set的HashSet之常用方法的使用6-1tjrac-Java集合类之List的ArrayList之增删改查仔细阅读下面编辑区内给出的代码框架及......
  • 微信小程序-声明和绑定事件
    一.概念小程序页面使用的数据在Page()方法里使用data对象进行声明定义定义好之后,使用{{}}进行绑定声明Page({data:{school:'未发之中',obj:{name:'dadada'},id:1,useChk:true}})绑定<!--使用双括号展示数据--><view>{{scho......