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

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

效果图

请添加图片描述
取得是图片中间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,很少看博客,对你有帮助别忘记点赞收藏。

相关文章:

  • 【前端】【业务场景】【面试】在前端开发中,如何实现实时数据更新,比如实时显示服务器推送的消息,并且保证在不同网络环境下的稳定性和性能?
  • MCP开发实战(一)基于MCP协议的大模型网关——多个大模型API统一封装为标准化工具
  • 第六章:安全最佳实践
  • MMsegmentation第一弹-(认识与安装)
  • 试水低代码平台Nocoly
  • DeepSeek-R1: LLMs 通过强化学习激励推理能力
  • LLM量化技术全景:GPTQ、QAT、AWQ、GGUF与GGML
  • 基于 EFISH-SBC-RK3588 的无人机环境感知与数据采集方案
  • Langchain检索YouTube字幕
  • 智能电网第5期 | 老旧电力设备智能化改造:协议转换与边缘计算
  • Langchain_Agent+数据库
  • Framework.jar里的类无法通过Class.forName反射某个类的问题排查
  • PCB 过孔铜厚的深入指南
  • Rust 2025:内存安全革命与异步编程新纪元
  • 解决编译pcl时报错‘chrono_literals‘: is not a member of ‘std‘
  • .NET Framework 4.0可用EXCEL导入至DataTable
  • 如何保证高防服务器中的系统安全?
  • Linux系统的延迟任务及定时任务
  • 阶段性人生答疑解惑篇:穿越市场迷雾,重构生命坐标系
  • 从数据到智慧:解密机器学习的自主学习密码
  • “五一”假期第四天,全社会跨区域人员流动量预计超2.7亿人次
  • 首日5金!中国队夺得跳水世界杯总决赛混合团体冠军
  • 李公明︱一周书记:数字文化的乌托邦精神与……算法时代的生存指南
  • 向左繁华都市,向右和美乡村,嘉兴如何打造城乡融合发展样本
  • 杭州挂牌临平区两宗住宅用地,起始总价约11.02亿元
  • 全国人大常委会关于授权国务院在中国(新疆)自由贸易试验区暂时调整适用《中华人民共和国种子法》有关规定的决定