当前位置: 首页 > 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系统的延迟任务及定时任务
  • 阶段性人生答疑解惑篇:穿越市场迷雾,重构生命坐标系
  • 从数据到智慧:解密机器学习的自主学习密码
  • 新华视点丨广西抗旱一线调查
  • 著名哲学家、中山大学哲学系原系主任李锦全逝世
  • 上海咖啡消费有多“嗲”?咖啡馆已逾9000家,咖啡节主市集持续4天
  • 云南洱源县4.8级地震:房屋受损442户,无人员伤亡报告
  • 小米首次参加上海车展:没有雷军依旧人气爆棚,YU7上市时间未推迟
  • 2025年一季度上海市国民经济运行情况