微信小程序|使用小程序制作一个马赛克处理工具

news2024/9/23 15:28:51

此文主要使用微信小程序制作一个马赛克处理工具,这个场景在生活中也非常常见,例如新闻之类有些视频或者图片不想给大众展示就会将其和谐掉,这就是马赛克应用。

在这里插入图片描述

    • 开发步骤
      • 创建小程序
      • 功能开发
      • 实现API
      • 接口响应

开发步骤

创建小程序

  1. 准备百度以及微信公众平台账号。
  2. 准备微信Web开发者工具。

功能开发

  1. 打开微信开发者工具,新建项目,依次选择不使用模板、不使用云服务。

在这里插入图片描述

  1. 在pages文件夹下面创建一个文件夹并新建对应的page文件。

在这里插入图片描述

  1. 在page上实现图片上传功能,需要将用户上传的图片显示到界面上,增强用户体验。

在这里插入图片描述

<view class="containerBox">
  <view class="leftBtn" bindtap="loadImage">
  <image src="../../images/xj.png"  class="btnImg"></image>
  上传照片
  </view>
  <view class="rightBtn" bindtap="identify">
  <image src="../../images/face.png"  class="btnImg"></image>
  图像处理
  </view>
</view>
    let that = this;
    wx.chooseImage({
      count: 0,
      sizeType: ['original', 'compressed'], //原图 / 压缩
      sourceType: ['album', 'camera'], //相册 / 相机拍照模式
      success(res) {
        that.setData({
          reproduction: res.tempFilePaths[0]
        });
        //将图片转换为Base64格式
        wx.getFileSystemManager().readFile({
          filePath: res.tempFilePaths[0],
          encoding: 'base64',
          success(data) {
            let baseData = data.data; //'data:image/png;base64,' + data.data;
            that.setData({
              baseData: baseData
            });
          }
        });
      }
    })

实现API

  1. 打开Visual Studio,创建新项目,选择ASP.NET Web应用程序(.NET Framework)。

在这里插入图片描述

  1. 填写项目名称及选择对应的保存位置,框架版本我们这里选择4.7.2。

在这里插入图片描述

  1. 选择MVC用它来搭建API接口,其他的选项默认即可。

在这里插入图片描述
在这里插入图片描述

  1. 在Controllers文件夹找到HomeController.cs,双击打开。

在这里插入图片描述

  1. 定义马赛克处理算法以及用于请求的接口,将上传的图片分割成若干个N * N像素的小区块,每个小区块的颜色都是相同的,返回一个Bitmap。

在这里插入图片描述

     /// <summary>
        /// 马赛克处理
        /// </summary>
        /// <param name="bitmap"></param>
        /// <param name="effectWidth"> 影响范围 每一个格子数 </param>
        /// <returns></returns>
        public Bitmap AdjustTobMosaic(System.Drawing.Bitmap bitmap, int effectWidth)
        {
            // 差异最多的就是以照一定范围取样 玩之后直接去下一个范围
            for (int heightOfffset = 0; heightOfffset < bitmap.Height; heightOfffset += effectWidth)
            {
                for (int widthOffset = 0; widthOffset < bitmap.Width; widthOffset += effectWidth)
                {
                    int avgR = 0, avgG = 0, avgB = 0;
                    int blurPixelCount = 0;

                    for (int x = widthOffset; (x < widthOffset + effectWidth && x < bitmap.Width); x++)
                    {
                        for (int y = heightOfffset; (y < heightOfffset + effectWidth && y < bitmap.Height); y++)
                        {
                            System.Drawing.Color pixel = bitmap.GetPixel(x, y);

                            avgR += pixel.R;
                            avgG += pixel.G;
                            avgB += pixel.B;

                            blurPixelCount++;
                        }
                    }

                    // 计算范围平均
                    avgR = avgR / blurPixelCount;
                    avgG = avgG / blurPixelCount;
                    avgB = avgB / blurPixelCount;

                    // 所有范围内都设定此值
                    for (int x = widthOffset; (x < widthOffset + effectWidth && x < bitmap.Width); x++)
                    {
                        for (int y = heightOfffset; (y < heightOfffset + effectWidth && y < bitmap.Height); y++)
                        {
                            System.Drawing.Color newColor = System.Drawing.Color.FromArgb(avgR, avgG, avgB);
                            bitmap.SetPixel(x, y, newColor);
                        }
                    }
                }
            }
            return bitmap;
        }
  1. 定义一个接口,用于给小程序调用,参数就是小程序上传的图片,返回也给一张图片即可。

在这里插入图片描述

public ActionResult AdjustTobMosaicImg()
   {
       //原图
       string img = Request.QueryString["image"];
       Bitmap map = new Bitmap(img);
       //马赛克处理后的图片
       Image img1 = AdjustTobMosaic(map, 20);
       img1.Save(@"这里放虚拟目录以及处理好的图片地址", ImageFormat.Jpeg);
       return Json(img1);
   }

接口响应

  1. 回到小程序page,给图像处理按钮增加一个事件调用我们编写好的接口。

在这里插入图片描述

 <view class="rightBtn" bindtap="identify">
  <image src="../../images/face.png"  class="btnImg"></image>
  图像处理
  </view>
  1. 在js中请求API实现的接口并将处理好的图片进行展示,这样就能得到一个马赛克处理后的图像。

在这里插入图片描述

    wx.request({
      url: '这里放你API的地址',
      method: 'POST',
      header: {
        'content-type': 'application/x-www-form-urlencoded'
      },
      data: {image:that.data.baseData},
      success: function (identify) {
        that.setData({
          result:identify.data
        });
      }
    })

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Python计算机毕业设计Django医疗器械公司公告管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

2022年11月份中国最具影响力的50位钧瓷匠人排行榜

讲好钧瓷产业的故事 有深度的故事&#xff0c;有温度的内容 有态度的文字&#xff0c;有立场的思考 版权声明:钧瓷内参独家发布&#xff0c;侵权必究 第320期 钧瓷内参 2022年12月1日 低代码——钧瓷企业数字化转型的核心引擎 2022年11月…

百趣代谢组学分享,肠道神奇细菌竟能调控体重,减肥有望“吃出来”

​代谢组学分享&#xff0c;上海交通大学附属瑞金医院宁光院士团队在Nature Medicine在线发布中国人肥胖的肠道菌群的较新研究&#xff0c;发现一系列丰度显著异于正常体重人群的肠道共生菌&#xff0c;其中多形拟杆菌&#xff08;BT菌&#xff09;口服可降低小鼠血清谷氨酸浓度…

java计算机毕业设计ssm校园安全随手拍系统wc38l(附源码、数据库)

java计算机毕业设计ssm校园安全随手拍系统wc38l&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xf…

港科夜闻|香港科大张利民教授荣获2023年度美国土木工程师学会派克奖(Ralph B. Peck Award)...

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、香港科大张利民教授荣获2023年度美国土木工程师学会派克奖(Ralph B. Peck Award)。张利民教授因在岩土多灾害风险评估、基于风险的工程设计和应急决策等领域的杰出贡献&#xff0c;荣获 2023年度美国土木工程师学会派克奖&a…

如何在 Spring Boot 项目中使用 Thymeleaf 和 Bootstrap 实现文件上传

在本教程中&#xff0c;我将向您展示如何在 Spring Boot 项目中使用 Thymeleaf 和 Bootstrap 实现文件上传。我们还使用 Spring Web MultipartFile界面来处理 HTTP 多部分请求。 Thymeleaf 文件上传概述 我们的 Spring Boot Thymeleaf 文件上传示例将具有以下功能&#xff1…

MongoDB的简介及安装配置

文章目录1、什么是MongoDB2、下载3、安装4、配置5、启动拓展&#xff08;mongo不是内部或外部命令&#xff09;1、什么是MongoDB MongoDB是一个基于分布式文件存储 [1] 的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据…

Matlab基于KD树的离散点密度特征提取—点云处理及可视化第4期

在之前的文章中&#xff0c;分享了Matlab基于KD树的邻域点搜索方法&#xff1a; 在此基础上&#xff0c;进一步分享一下基于KD树的离散点密度特征提取方法。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;《Matlab点云处理及可视化》系列文章整理自作者博士期间的部分…

汇编语言与微机原理 期末半开卷复习整理(下)

输入输出 8086采用I/O端口独立编址 in AL/AX,imm8/DX out imm8/DX,AL/AX 大于0FFH的端口只能存在DX 读外设(查询) status:in al,dxtest al,80H;//测标志位jz statusmov dx,100hin al,dx写外设&#xff08;查询&#xff09; status:mov dx,102Hin al,dxtest al,80Hjnz status…

Qt实现跨平台窗口选择功能

Qt实现跨平台获取鼠标位置窗口大小功能 文章目录Qt实现跨平台获取鼠标位置窗口大小功能1、概述2、实现效果3、实现原理4、关键代码5、源代码更多精彩内容&#x1f449;个人内容分类汇总 &#x1f448;&#x1f449;Qt自定义模块、工具&#x1f448; 1、概述 Qt版本&#xff1a…

从源码层面理解 React 是如何做 diff 的

大家好&#xff0c;我是前端西瓜哥。今天带带大家来分析 React 源码&#xff0c;理解它的单节点 diff 和多节点 diff 的具体实现。 React 的版本为 18.2.0 reconcileChildFibers React 的节点对比逻辑是在 reconcileChildFibers 方法中实现的。 reconcileChildFibers 是 Chil…

ATTCK-T1003-001-操作系统凭据转储:LSASS内存

0x01基础信息 具体信息详情ATT&CK编号T1003-001所属战术阶段凭据访问操作系统windows 7 旗舰版 SP1创建时间2022年11月17日监测平台火绒安全、火绒剑、sysmon 0x02技术原理 攻击者可能会尝试访问存储在本地安全机构子系统服务 (LSASS) 进程内存中的凭证材料。用户登录后&…

Linux文件服务配置FTP服务

作者简介&#xff1a;一名99年软件运维应届毕业生&#xff0c;正在自学云计算课程。宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。创作不易&#xff0c;动动小手…

【Python恶搞】Python实现祝福单身狗的恶搞项目,快@你的好朋友,祝福他吧 | 附源码

前言 halo&#xff0c;包子们上午好 咱就说&#xff0c;谁还没有一个单身的小伙伴呢 今天这个代码主要是为了祝福咱们单身的小伙伴 咱就说废话不多说&#xff0c;直接上才艺 相关文件 关注小编&#xff0c;私信小编领取哟&#xff01; 当然别忘了一件三连哟~~ 源码点击蓝色…

数据可视化是让信息表现更复杂?很多人可能错了

数据可视化&#xff0c;目前行业中很多人认识有些偏颇&#xff0c;数据可视化就是单纯认为是大屏展示、酷炫的图表&#xff0c;很多人仅仅是把数据可视化 作为展厅中的刚性需求而已&#xff0c;其实这个是对数据行业的偏见&#xff0c;很多人侧重于数据的表现&#xff0c;而非便…

谷歌北大扩散模型(Diffusion Model)首篇综述来了!

本综述&#xff08;Diffusion Models: A Comprehensive Survey of Methods and Applications&#xff09;来自加州大学&Google Research的Ming-Hsuan Yang、北京大学崔斌实验室以及CMU、UCLA、蒙特利尔Mila研究院等众研究团队&#xff0c;首次对现有的扩散生成模型&#xf…

ftp工具的21端口无法连上远程主机

一、检测是否有安装vsffpd netstat -tunlp 没有安装先安装 1.安装 vsftpd 执行以下命令&#xff0c;安装 vsftpd。 yum install vsftpd -y 2.启动服务 执行以下命令&#xff0c;启动服务。 systemctl start vsftpd 3.执行以下命令&#xff0c;确认服务是否启动。 netstat -tun…

【c++基础】第二章 微观部分:面向对象之类的组成

第二章 微观部分&#xff1a;面向对象之类的组成类函数构造函数析构函数拷贝构造函数运算符重载函数封装一个字符串类初始化列表this指针常对象和常成员函数&#xff08;方法&#xff09;静态属性和静态成员函数单例设计模式类 对象&#xff1a;属性和方法组成&#xff0c;是类…

Nature子刊 | 空间转录组技术及其发展方向

2022年10月《Nature Biotechnology》发表了一篇空间转录组&#xff08;ST&#xff09;技术的综述文章&#xff0c;详细描述了现有的ST技术及其发展方向。 检测生物分子的新技术一直是生物进步的关键驱动力。在检测生物分子时&#xff0c;研究人员在选择实验方法时一直面临着关键…

CENTOS上的网络安全工具(十四)搬到Docker上(2)?

既然说要搬到Docker上&#xff0c;那么肯定是要把咱日常习惯用的那些东西都往docker上堆一堆看的。我最先考虑的居然是SSH&#xff0c;乃至于到现在我都不知道我为什么第一个想到的是SSH——因为对虚拟机来说&#xff0c;首先考虑的当然是如何远程管理集群中的每个机器&#xf…