当前位置: 首页 > backend >正文

微信小程序根据图片生成背景颜色有效果图

效果图

请添加图片描述
取得是图片中间10个像素算出背景颜色

.wxml

<canvas type="2d" id="imageCanvas" style="--w: {{w}}px;--h: {{h}}px;" />
<view style="background: {{backgroundColor}};"><image bind:tap="updateIndex" data-index="{{index}}" wx:for="{{image}}" wx:key="index" src="{{item}}" mode="aspectFill" style="{{select === index?'border:2px solid red;':''}}" />
</view>

.wxss

canvas{visibility: hidden;position: absolute;z-index: -1;width: var(--w);height: var(--h);left: var(--w);top: calc(var(--w) * -1);
}
view{height: 100vh;text-align: center;transition: all 0.5s;
}
image{width:300rpx;height:300rpx;margin: 30rpx 30rpx 0;box-sizing: border-box;
}

.js

Page({data:{w:0,h:0,image:['https://c-ssl.dtstatic.com/uploads/blog/202402/27/1mS1Nve5iQqnQpN.thumb.400_0.jpg','https://c-ssl.dtstatic.com/uploads/blog/202402/23/aLS3821yt0BE1yW.thumb.400_0.jpeg','https://c-ssl.dtstatic.com/uploads/blog/202402/25/lGSgwXVEhxOzbqx.thumb.400_0.jpeg','https://c-ssl.dtstatic.com/uploads/blog/202402/27/lGS1anBpixO7xG3.thumb.400_0.jpg',],select:0},onLoad(options) {this.getColor()},updateIndex(e){this.setData({select:e.currentTarget.dataset.index})this.getColor()},getColor(){var that = thisconst src = that.data.image[that.data.select]that.getImageData(src, pixels => {const mainColor = that.MainColor(pixels);that.setData({backgroundColor: `rgb(${mainColor[0]}, ${mainColor[1]}, ${mainColor[2]})`,});});},getImageData(src, fn) {var that = thiswx.getImageInfo({src,success(res) {const { width, height } = res;that.setData({w:width,h:height})wx.createSelectorQuery().select('#imageCanvas').fields({ node: true, size: true }).exec((rect) => {const canvas = rect[0].nodeconst ctx = canvas.getContext('2d')canvas.width = widthcanvas.height = heightconst image = canvas.createImage()image.src = srcimage.onload = () => {ctx.drawImage(image,0,0,width,height)const x = (width - 10) / 2 | 0,y = (height - 10) / 2 | 0const o = ctx.getImageData(x, y, 10, 10)fn(o.data);};})},});},MainColor(pixels) {const colorFrequency = {};for (let i = 0; i < pixels.length; i += 4) {const red = pixels[i];const green = pixels[i + 1];const blue = pixels[i + 2];const key = `${red},${green},${blue}`;if (!colorFrequency[key]) {colorFrequency[key] = 0;}colorFrequency[key]++;}let mainColor = '';let maxCount = 0;Object.keys(colorFrequency).forEach(key => {if (colorFrequency[key] > maxCount) {maxCount = colorFrequency[key];mainColor = key.split(',').map(Number);}});return mainColor;},
})

遇到问题可以看我主页加我Q,很少看博客,对你有帮助别忘记点赞收藏。

http://www.xdnf.cn/news/1582.html

相关文章:

  • 并发设计模式实战系列(6):读写锁
  • 【UVM项目实战】异步fifo—uvm项目结构以及uvm环境搭建
  • 开源交易所源码,交易所开发
  • 11.原型模式:思考与解读
  • 使用eclipse将原有tomcat插件工程调整为的Dynamic Web Module工程(保姆级教程)
  • 【数据可视化-26】基于人口统计与社会经济数据的多维度可视化分析
  • 【LLM+Code】Windsurf Agent 模式PromptTools详细解读
  • JAVA---面向对象(上)
  • 5.3.1 MvvmLight以及CommunityToolkit.Mvvm介绍
  • Redis安装及入门应用
  • 第53.5讲 | 小项目实战:用 SHAP 值解释农作物产量预测模型 [特殊字符][特殊字符]
  • SpringBoot整合AOP
  • Tomcat:从零理解Java Web应用的“心脏”
  • 健康养生小窍门
  • 微高压氧舱VS高压氧舱:氧气疗法的“双生花”如何重塑健康?
  • 【前端】基于 Promise 的 HTTP 客户端工具Axios 详解
  • MVCC详解
  • 【前端】【业务场景】【面试】在前端开发中,如何实现文件的上传与下载功能,并且处理可能出现的错误情况?
  • 机械手排列定位设备 PLC梯形图流程
  • 乐聚机器人与地瓜机器人达成战略合作,联合发布Aelos Embodied具身智能
  • UE5 Assimp 自用
  • ragflow部署以及api调用整理
  • java—13 RocketMQ
  • 拥抱健康生活,解锁养生之道
  • 某城乡老旧房屋试点自动化监测服务项目
  • 关于边缘计算盒子的外部接口保护
  • Python 的 datetime 模块使用详解
  • Redisson实战:分布式系统中的五大典型应用场景
  • 来访登记二维码生成
  • 数据一致性问题剖析与实践(二)——单机事务的一致性问题