uniapp获取图片的主题色

微信、支付宝、百度(drawImage及canvasGetImageData、支付宝(getImageData))踩坑,uni-app 获取图片底色像素值 uni-app 小程序 获取图片底色像素值 阅读详情

写在前面

需要做一个海报分享的功能,不过觉得海报预览区域太丑了,想到做一个根据海报主题色变更的背景色功能。
功能实现了,但是性能太差,不过代码删了可惜,留存一下。
最后的方案是用生成的base64图片做背景(当然是高斯模糊了,25px这样)

需求

在这里插入图片描述

代码

      const bgCtx = uni.createCanvasContext('bgCanvas')

      const currenTmplInfo = this.tmplList[this.currentTmplIdx]
      const {wrap}  = currenTmplInfo
      const imgWidth = wrap.width
      const imgHeight = wrap.height

      bgCtx.setFillStyle('red')
      bgCtx.fillRect(0, 0, imgWidth, imgHeight)
      bgCtx.drawImage(this.currentImgPath, 0, 0,imgWidth, imgHeight)

      console.log({imgWidth,imgHeight})

      // console.log(e.detail)
      // let imgData = (bgCtx.getImageData(0, 0, e.detail.width, e.detail.height)).data
      // //x开始复制的左上角位置的 x 坐标。 y 开始复制的左上角位置的 y 坐标。 width 将要复制的矩形区域的宽度。 height 将要复制的矩形区域的高度。
      // // ImageData.data	类型为Uint8ClampedArray的一维数组,每四个数组元素代表了一个像素点的RGBA信息,每个元素数值介于0~255
      // var b = '(' + imgData[0] + ',' + imgData[1] + ',' + imgData[2] + ',' + imgData[3] + ')'
      // var c = '(' + imgData[4] + ',' + imgData[5] + ',' + imgData[6] + ',' + imgData[7] + ')'
      // var d = '(' + 255 + ',' + 255 + ',' + 255 + ',' + 255 + ')'
      // this.bgColorStr = `linear-gradient(rgb${b},rgb${c},rgb${d})`;

      await new Promise(resolve => {
        bgCtx.draw(false, function () {
          console.log('draw done bg')
          resolve()
        })
      })

      console.log({
        x: 0,
        y: 0,
        canvasId: bgCtx.id,
        width: imgWidth,
        height: imgHeight,
      })

      // const tempFilePath = await new Promise((resolve, reject) => {
      //   uni.canvasToTempFilePath({
      //     canvasId: 'bgCanvas',
      //     width: imgWidth,
      //     height:imgHeight,
      //     success: function(res) {
      //       // 在H5平台下,tempFilePath 为 base64
      //       resolve(res.tempFilePath)
      //     },
      //     fail:function (err){
      //       throw Error(err.errMsg)
      //     }
      //   })
      // })

      //console.log(tempFilePath)

      uni.canvasGetImageData({
        x: 0,
        y: 0,
        canvasId: bgCtx.id,
        width: imgWidth,
        height: imgHeight,
        success: (res) => {
          console.log(res)
          let imgData = res.data;
          console.log(imgData)
          var r = 1,
              g = 1,
              b = 1,
              a = 1;

          const arr = Array.prototype.slice.call(imgData, 0)

          for (var i = 0; i < arr.length; i += 4) {
            r += arr[i];
            g += arr[i+1];
            b += arr[i+2];
            a += arr[i+3];
          }

          // 求取平均值
          r /= (imgWidth * imgHeight);
          g /= (imgWidth * imgHeight);
          b /= (imgWidth * imgHeight);
          a /= (imgWidth * imgHeight);
          // 将最终的值取整
          r = Math.round(r);
          g = Math.round(g);
          b = Math.round(b);
          a = Math.round(a);
          let obj = {
            r,
            g,
            b,a
          }
          console.log(obj)

          const linearGradientColor1 = `rgba(${r},${g},${b},${a})`
          const linearGradientColor2 = `rgba(${r},${g},${b},${a*.2})`
          this.bgColorStr = `linear-gradient(${linearGradientColor1},${linearGradientColor2})`;
          //x开始复制的左上角位置的 x 坐标。 y 开始复制的左上角位置的 y 坐标。 width 将要复制的矩形区域的宽度。 height 将要复制的矩形区域的高度。
          // ImageData.data	类型为Uint8ClampedArray的一维数组,每四个数组元素代表了一个像素点的RGBA信息,每个元素数值介于0~255

          // var b = '(' + imgData[0] + ',' + imgData[1] + ',' + imgData[2] + ',' + imgData[3] + ')'
          // var c = '(' + imgData[4] + ',' + imgData[5] + ',' + imgData[6] + ',' + imgData[7] + ')'
          // var d = '(' + 255 + ',' + 255 + ',' + 255 + ',' + 255 + ')'
          // this.bgColorStr = `linear-gradient(rgba${b},rgba${c},rgba${d})`;



        },
        fail: (fail) => {
          console.log(fail)
        }
      });

可扩展

  • 获取前五或者任意个排名靠前的色
  • 想办法优化下性能
uniapp获取图片主题颜色改变导航栏 uniapp根据轮播图获取图片主题颜色随之改变导航栏 阅读详情

相关推荐

uniapp手机端图片缓存方案

uniapp手机端图片缓存方案 思路:定义缓存图片key值规则,每次加载网络图片时,首先根据key获取本地存储的数据,查询是否有对应文件路径,如果有缓存内容,直接返回本地图片路径去渲染显示,若没有缓存数据,就用图片网络路径去下载并保存到本地 定义获取缓存图片的全局js函数 /* * @description 获取文件的缓存路径,如果文件未缓存,则直接返回网络路径,并下载缓存 * @method getImageCache * @param {String} filePath 完整的图片下载路径,如

weixin_46472771的博客 1万+

uni-app获取图片背景色

【代码】uni-app获取图片背景色。

weixin_44959182的博客 1379

uniapp拍照离线定位,获取图片信息,经纬度解析地址

✅作者简介:我是痴心阿文,你们的学友哥,今天给大家分享uniapp拍照离线定位,获取图片信息,经纬度解析地址🔥本文前言:需求,手机拍照定位,获取经纬度并上传图片,当手机无网络的时候也可以离线拍照通过定位上传图片,用到的有地图定位api,设备信息api,相机api等。

爱就码上行动,奔赴热爱,追光而行。愿你带着从容与热爱,拥抱每一天的惊喜与美好 4697

uniapp二次封装image 包含主色调识别,默认图,加载失败图

uniapp 二次封装image 包含主色调识别,默认图,加载失败图

qq_45723621的博客 1131

uniapp html2canvas 生成图片

下载插件html2canvas.min.js 直接粘贴复制下面的也可以 /*! * html2canvas 1.0.0-rc.3 <https://html2canvas.hertzen.com> * Copyright (c) 2019 Niklas von Hertzen <https://hertzen.com> * Released under M...

Neil_1993的博客 1万+

获取图片颜色色值

图片主题色在图片所占比例较大的页面中,能够配合图片起到很好视觉效果,给人一种和谐、一致的感觉。同时也可用在图像分类,搜索识别等方面。通常主题色的提取都是在后端完成的,前端将需要处理的图片以链接或id的形式提供给后端,后端通过运行相应的算法来提取出主题色后,再返回相应的结果。 但是过程麻烦所以今天分享个插件直接获取

uniapp根据图片下载地址获取图片主题色

uniapp小程序获取图片主题色

weixin_51213859的博客 827

别再只调A*算法了!聊聊ROS机器人导航中,OpenCV视觉信息如何与激光雷达数据“打配合”

本文探讨了ROS机器人导航中激光雷达与OpenCV视觉融合的实战策略,揭示了如何通过多模态感知提升导航精度。文章详细介绍了视觉特征到代价地图的转化方法、系统级挑战的工程解决方案,以及融合感知下的路径规划进化,帮助开发者优化机器人导航系统。

weixin_29278805的博客 226

uniapp h5获取图片主题色

适用于uni-app H5等支持DOM/canvas的环境。该工具核心功能包括:1)使用八叉树算法从图片中高效提取主题色;2)支持生成线性/径向渐变效果;3)提供CSS代码复制功能。主要技术特点:通过Canvas获取图片像素数据,采用八叉树算法进行颜色量化,支持自定义提取颜色数量和质量参数。界面设计包含图片预览区、颜色展示区、渐变控制区和代码生成区,适用于电商等需要提取图片主色调的场景。工具封装为ColorExtractor类,提供图片处理、颜色提取

xiuxiuxiu555的博客 170

RK3568点不亮EK79007 MIPI屏?别急着改时序,先检查这个初始化命令

本文深入解析RK3568开发板调试EK79007 MIPI屏幕时初始化命令的关键作用,揭示80%的时序问题实际源于命令配置不当。通过典型故障案例,详细拆解初始化命令的调试方法、寄存器映射及系统化排查流程,帮助工程师快速定位和解决屏幕点亮问题。

weixin_33657090的博客 349

芒果YOLO11改进81:主干Backbone篇之DCNv3结构:即插即用|使用pytorch代码实现,并针对YOLO11专门优化模块

芒果YOLO11改进81:主干Backbone篇之DCNv3结构:即插即用|使用pytorch代码实现,并针对YOLO11专门优化模块

包括YOLOv5、YOLOv7、YOLOv8等模型改进 736

获取图片主题色色值(vue、uniapp)

【代码】获取主题色色值(vue、uniapp)

qq_48315915的博客 1239

【机器学习|评价指标8】混淆矩阵(Confusion Matrix)、Cohen‘s Kappa 系数、详解,平均交并比(mIoU)、列联表(Contingency Table)附代码。

【机器学习|评价指标8】混淆矩阵(Confusion Matrix)、Cohen's Kappa 系数、详解,平均交并比(mIoU)、列联表(Contingency Table)附代码。

2401_89898861的博客 1424

uniapp 微信小程序配置全局主题色、实现动态修改主题色

本文的实现目标是全局配置小程序的整体主题色,包括本地图标的色调。第一步实现在本地可以统一修改整体的主题色以及本地图标的颜色;第二步实现通过后台接口动态调整小程序前端的整体主题色以及本地图标颜色。本地图标的主题色调整需要使用svg格式的图片,关于svg图片颜色修改可以参考文章。

wolf艺术人生 1万+

Python之aaindex包语法、参数和实际应用案例

`aaindex`是一个专为生物信息学设计的Python包,主要用于处理氨基酸指数(AAindex)数据库。该数据库收集了各种氨基酸的物理化学性质和统计特性,涵盖疏水性、电荷、体积等500多种特性。`aaindex`包提供了便捷的接口,让用户能够快速访问这些数据,并应用于蛋白质序列分析、结构预测、功能推断等领域。

王国平的博客 1036

17、高通8155座舱平台--QNX开发基础

我个人习惯,拿到一个新板子,第一件事就是打开IDE,建一个空的QNX项目,然后跑一遍Hello World。比如,当触摸屏被按下时,驱动发一个脉冲给UI进程,告诉它“嘿,有人摸屏幕了”。我在8155上调试时,就遇到过因为脉冲优先级太低,导致触摸响应延迟的问题。IDE自带的编译器是qcc,它其实是gcc的封装。QNX的IPC机制,可以说是它最牛的地方。嗯,这套流程走下来,你对QNX开发的基本功就差不多了。QNX默认的消息缓冲区大小是64KB,如果你要传大块数据,比如音频流,那就得用共享内存了。

woailuojp的博客 50

uniapp之微信小程序开发——根据主题色动态修改svg的颜色

文章目录小程序引用图片的几种方式如何根据主题色改变图标颜色? 小程序引用图片的几种方式 这一期我们直入主题,教大家如何动态改变图标的颜色。 首先,我们知道小程序引用图片的方式并不多。目前小程序并不支持直接引用svg文件,也不支持直接引用本地文件。总结下来,可行的方法有如下几种: img的src引用 云文件的cloudID 图片的https链接 图片base64格式 字体图标 如uniapp的u...

HouGISer的博客 8244

Vue3 - H5实现省市区三四级联动组件,选择地址自定义省市区三级联动插件,弹框式多级联动选择器区域选择,vue3实现省市区三级联动地址选择组件(支持接口数据懒加载,样式精美漂亮,附带详细示例源码)

vue3实现省市区三级联动地址选择组件(附address文件),vue3实现省市区三级联动, 实现省、市、县地区三级联动功能,vue3省市区选择器,VUE3 h5如何实现省市区街道的四级联动选择,vue实现省市区选择联动,vue3城市三级联动(自定义组件)_VUE三级联动,插件省市区联动,vue如何实现省市区选择器,vue3怎样实现省市区地址三级联动,vue四级联动,vue3级联选择器,vue3实现选择省市区镇(街道)四级级联选择,包含三级级联选择,省市区街道三级四级联动选择器,VUE3自定义多列选择器省市

🏆 前端领域优质创作者 3068

app更换主题色的方法(uni-app为例)

1.对于下划线,背景色,普通颜色字体的处理方式如下: ①如果后端返回的是#******的方式,通过下面的方法转换为rgb。 hexToRgb: function(hex) { var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); return res...

qq_36566924的博客 9119

硬件工程师笔记——电子器件汇总大全

本文系统总结了14种常用电子器件的工作原理及功能应用,包括电阻、压敏电阻、电容、电感、二极管、三极管、MOS管、晶振、光耦、IGBT、继电器、磁珠、可控硅和线性稳压器。每种器件从结构原理、工作特性到典型应用进行全面解析,如电阻的限流分压、电容的储能滤波、三极管的放大开关等。重点阐述了各器件在电路设计中的关键作用,如IGBT的功率控制、继电器的隔离保护、LDO的电压稳定等,并提供了实际电路应用案例。文章还整理了硬件工程师笔试面试相关的知识点和真题资源,为电子工程师提供全面的技术参考。

XU157303764的博客 2万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

uniapp图片无法显示

首先确定是在什么环境下不展示图片,确定你的标签是<img>还是<image>,确定你是网页不展示图片还是真机模拟不展示图片,请对应问题查找方法。 一、引用本地文件中存储的图片 (1)真机环境 (2)网页环境 二、引用localhost或者127的本地服务器图片 (1)真机环境 (2)网页环境 三、引用本地服务器开启的端口的图片 (1)真机环境 (2)网页环境 四、富文本...

progrmmmm的博客 2万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

uniapp选择图片及图片预览的实现

一、uniapp选择图片及图片预览的实现 uni.chooseImage(OBJECT) 选择图片 uni.previewImage(OBJECT) 图片预览 1、具体实现代码如下 getImg事件选择图片 lookImg事件预览图片 <template> <view> <button type="default" @click="getImg">选择图片</button> <view v-for="(item,index) i

旭哥的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

uniapp实现上传图片并显示

uniapp实现上传图片并显示 uniapp为我们提供了非常多的api接口,当然包括上传图片的接口,可以直接使用 文章目录uniapp实现上传图片并显示uniapp图片上传接口 - uni.chooseImage(OBJECT)success 返回参数说明File 对象结构如下示例: uniapp图片上传接口 - uni.chooseImage(OBJECT) 参数名 类型 必填 说明 平台差异说明 count Number 否 最多可以选择的图片张数,默认9 见下方说明 sizeTyp

GengMS的博客 4万+

uniapp中上传图片

uniapp上传图片一、使用ColorUI二、上传图片1、html代码片段2、methods中代码片段:2.1 选择图片2.2 上传图片传递 formdata 格式的图片数据到后台2.3 预览图片2.4 取消上传 删除图片 一、使用ColorUI 在uniapp项目中使用了ColorUI的一些样式,所以就在这里再记录一下使用方法 uniapp项目中引入ColorUI : 参考链接 ColorUI文档 colorui 下载连接 大致流程: 先去官网下载colorui压缩包,解压到本地 将里面的c

xx_ll_的博客 6676

uniapp,从文件流获取图片地址,并展示图片

uniapp,从文件流获取图片地址,并展示图片 不同与web端,uniapp在处理图片文件流的时候,略有区别,上代码 <template> <view class="wrap"> <img :src="qrUrl"> </view> </template> <script> export default { data() { return { qrUrl:'' ,//图片路径 } }, mou

qq_42376171的博客 1万+

uniapp h5上传图片对图片进行压缩旋转处理

之前写过一个关于vue的上传图的旋转处理。可以直接点击查看:使用vue进行移动端上传图 场景:uniapp开发的h5项目,需要内嵌在app中运行,在项目首页有一块是自定义上传日历背景图,并且需要进行裁剪。 最开始直接使用的插件市场的插件,但是由于webview的原因,该项目内嵌app后在ios上出现了无法解决的bug。故弃用了插件,并且由于需求调整目前只进行图片的上传旋转处理。(下面着重旋...

SnowBeatRain的博客 6763
上一篇: 组件json数据格式说明
下一篇: bigmap的2d与3d地图初始化,多图层。
汪小君
博客等级 码龄12年 120粉丝 94原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值