主页 > 前端 > javascript >
来源:未知 时间:2018-01-29 09:59 作者:小飞侠 阅读:次
[导读] 本篇文章是小编整理的关于javascript获取图片的top N主色值方法的详解以及代码分享,有兴趣的朋友参考下吧。...
js获取图片的top N主色值canvas方法详解 题目要求 找出一个页面中出现次数最多的标签!!! 个人解法: 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,决策树,朴素贝叶斯,支持向量机等等,喜欢哪个就用哪个就可以了,但是还是需要考虑下不同方法的适用情况和效率什么的了。 3、聚类结果排序 对上一步中得到的json数组进行排序,根据属性weight的值从大到小或者从小到大排序,排序算法就不用多言了。 4、结果预览 5、to Do 相似色值合并 rgba(234,234,234,1)和rgba(234,235,235,1)类似的这种是否有必要合并成为一个值,这里又会涉及到相似度计算等问题。 优化聚类算法 提高复杂度,提升性能,提升执行速度 结合可视化的一些东西 6、总结 数据多的处理还是放在后端比较合适,毕竟可以利用分布式框架等多端计算。 而浏览器处理数据的能力还是有限。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com