JS获取图片的top N色值方法

这次给大家带来JS获取图片的top N色值方法,JS获取图片top N色值的注意事项有哪些,下面就是实战案例,一起来看一下。

题目要求

找出一个页面中出现次数最多的标签!!!

个人解法:

var eles = document.getElementsByTagName('*');var rs = [];for(var i=0; i<eles.length; i++) {  var tag_name = eles[i].tagName.toLowerCase();  if(undefined != tag_name) {    if(inJsonArray(rs, tag_name)) {      addWeight(rs, tag_name);    }else {      rs.push({        tag : tag_name,        weight : 1      })    }          }      }SortByWeight(rs);

登录后复制

思路:

拿到所有的标签–根据标签名称聚类—根据权重排序。

如果有更好的方法,欢迎交流。

下面看今天这个问题:

获取一张图片的top N主色值,和上面最多标签的问题很类似,数据大小有区别,别的都差不多的。

这个问题思路很清晰,第一步,拿到图片的数据;第二步,根据色值进行聚类;第三步,对聚类结果排序。所以这次就是根据这个思路去实现。

1、数据获取

图片数据获取使用了canvas的getImageData()方法,能获取到图片每个像素点的rgba数据。

var imgdatas=context.getImageData(0,0,150,150);//获取当前canvas数据var imgdata = imgdatas.data;//获取rgba数据var i = 0, len = imgdata.length;var arr = [];//将图片rgba数据push到新数组中for(i ; i<len ; i+=4 ) {  arr.push(imgdata[i]+','+imgdata[i+1]+','+imgdata[i+2]+','+imgdata[i+3]);  }

登录后复制

这样就可以拿到图片的所有数据了,剩下的就是数学问题了。

2、数据聚类

去重,相同色值合并,记录该色值出现个数(权重)weight

聚类方法就比较多了,直接数学统计,或者k-means,决策树,朴素贝叶斯,支持向量机等等,喜欢哪个就用哪个就可以了,但是还是需要考虑下不同方法的适用情况和效率什么的了。
我们会得到这样一个数组 [{rgba: ‘21,12,45,0’, weight: 12}, {…}]来记录色值和出现次数,

3、聚类结果排序

对上一步中得到的json数组进行排序,根据属性weight的值从大到小或者从小到大排序,排序算法就不用多言了。

4、结果预览

JS获取图片的top N色值方法

5、to Do

相似色值合并

rgba(234,234,234,1)和rgba(234,235,235,1)类似的这种是否有必要合并成为一个值,这里又会涉及到相似度计算等问题。

优化聚类算法

提高复杂度,提升性能,提升执行速度

结合可视化的一些东西

6、总结

数据多的处理还是放在后端比较合适,毕竟可以利用分布式框架等多端计算。

而浏览器处理数据的能力还是有限。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

在小程序里实现animation动画

小程序获取openid及用户信息的方法

使用jquery做出PC端轮播图的实列详解

以上就是JS获取图片的top N色值方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2779759.html

(0)
上一篇 2025年3月8日 15:51:05
下一篇 2025年1月4日 01:30:13

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • D3.js创建物流地图

    这次给大家带来D3.js创建物流地图,D3.js创建物流地图的注意事项有哪些,下面就是实战案例,一起来看一下。 示例图 制作思路 需要绘制一张中国地图,做为背景。 需要主要城市的经纬坐标,以绘制路张起点和终点。 接收到物流单的城市,绘制一个…

    2025年3月8日
    200
  • ejsExcel模板在Vue.js中的使用

    这次给大家带来ejsExcel模板在Vue.js中的使用,ejsExcel模板在Vue.js中使用的注意事项有哪些,下面就是实战案例,一起来看一下。 什么是ejsExcel? ejsExcel是一款国人开发的、在Node.js应用程序中使用…

    2025年3月8日 编程技术
    200
  • JS如何做出公共子序列

    这次给大家带来JS如何做出公共子序列,JS实现公共子序列的注意事项有哪些,下面就是实战案例,一起来看一下。 介绍 最长公共子序列(Longest Common Subsequence LCS)是从给定的两个序列X和Y中取出尽可能多的一部分字…

    2025年3月8日 编程技术
    200
  • Web应用开发为什么选择Node.js

    这次给大家带来Web应用开发为什么选择Node.js,Web应用开发选择Node.js的注意事项有哪些,下面就是实战案例,一起来看一下。 一项颠覆性的技术进入技术市场总会带来一阵震惊,但随之而来往往是被放弃。然而,Node.js 当然不是这…

    2025年3月8日 编程技术
    200
  • JS的策略模式使用详解

    这次给大家带来JS的策略模式使用详解,使用JS策略模式的注意事项有哪些,下面就是实战案例,一起来看一下。 策略模式的概念引用: 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法…

    2025年3月8日
    200
  • JS自动计算酒店住宿费用

    这篇文章主要介绍了javascript实现获取一个日期段内每天不同的价格(计算入住总价格)的相关资料,需要的朋友可以参考下   代码例子 最近在做酒店的小程序项目开发,遇到一个这样的问题。 酒店的房间价格是浮动的,每天每时或某个特殊的日期价…

    2025年3月8日
    200
  • JS的Object内部方法图

    这次给大家带来JS的Object内部方法图,Object内部方法图注意事项有哪些,下面就是实战案例,一起来看一下。 对于JavaScript对象的操作基本上都会调用底层的对象内部方法,我们可以看出在ES6标准中定了14种内部方法. 双 [[…

    2025年3月8日
    200
  • 在Vue.JS中怎样使用echarts

    这次给大家带来在Vue.JS中怎样使用echarts,在Vue.JS中使用echarts的注意事项有哪些,下面就是实战案例,一起来看一下。 上篇文章给大家介绍了 在 webpack 中使用 ECharts的实例详解 ,可以点击查看。 1. …

    编程技术 2025年3月8日
    200
  • js的作用域与预解析使用详解

    这次给大家带来js的作用域与预解析使用详解,js作用域与预解析使用的注意事项有哪些,下面就是实战案例,一起来看一下。 虽然,ES6在我们工作中应用得越来越广泛,但是还是很多项目保留着ES5的写法,所以,今天,带着大家重新巩固下ES5下的作用…

    编程技术 2025年3月8日
    200
  • JS仿今日头条手机端主页界面

    这次给大家带来JS仿今日头条手机端主页界面,JS仿今日头条手机端主页界面的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 vue也弄了一段时间了, 前段时间一直想用vue写个移动端,加之年底也不是很忙,于是前几天便着手开始弄了,到今…

    2025年3月8日 编程技术
    200

发表回复

登录后才能评论