宝哥软件园

用javascript获取图片前N个主色值的方法详解

编辑:宝哥软件园 来源:互联网 时间:2021-09-01

主题请求

找出页面中出现频率最高的标签!

个人解决方案:

var eles=document . getelementsbytagname(' * ');var RS=[];for(var I=0;雅思. length;I){ var tag _ name=eles[I]. tagname . tolowercase();if(未定义!=tag _ name){ if(insonarray(RS,tag_name)) { addWeight(rs,tag _ name);} else { RS . push({ tag : tag _ name,weight : 1 })} } } sortbyweak(RS);思考:

获取所有标签-根据标签名称聚类-根据权重排序。

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

我们来看看今天的问题:

获取一张图片的前N个主色值类似于上面大多数标签的问题,数据大小不同,但其他都差不多。

这个问题的思路很清晰。第一步是获取图片的数据;其次,根据颜色值进行聚类;第三步是对聚类结果进行排序。所以这一次,就是基于这样的想法。

1.数据采集

图像数据采集采用canvas的getImageData()方法,可以获取图像每个像素的rgba数据。

var img data as=context . getimagedata(0,0,150,150);//获取当前画布数据var img data=img data as . data;//get rgba data var i=0,len=imgdata.lengthvar arr=[];//将图片的rgba数据推入新数组(I;伊琳;i=4 ) { arr.push(imgdata[i]'、' imgdata[i 1]'、' imgdata[i 2]'、' img data[I 3]);}这样就可以得到图片的所有数据,剩下的就是数学题了。

2.数据分组

重复数据消除,合并相同的颜色值,并记录颜色值的数量(权重)

聚类方法有很多,如直接数理统计,或k-means,决策树,朴素贝叶斯,支持向量机等。你可以使用任何你喜欢的方法,但是你仍然需要考虑不同方法的适用性和效率。我们将得到这样一个数组[{rgba:' 21,12,45,0 ',weight: 12},{ 0.}]来记录颜色值和出现时间。

3.对聚类结果进行排序

对上一步得到的json数组进行排序,按照属性权重的值由大到小或者由小到大进行排序,排序算法不用解释。

4.预览结果

5、做什么

相似颜色值的组合

rgba(234,234,234,1)和rgba(234,235,235,1)是否相似需要合并成一个值,这里会涉及到相似度的计算。

优化聚类算法

提高复杂性、性能和执行速度

结合了视觉化的东西

6.摘要

最好在后端处理大量数据,毕竟可以使用分布式框架等多端计算。

但是浏览器处理数据的能力仍然有限。

更多资讯
游戏推荐
更多+