canvas获取图片主题色

vue吸管拾器、利用canvas获取坐标点颜canvas获取坐标点颜图片跨域、图片转base64、colorPicker vue吸管拾器、利用canvas获取坐标点颜 1.需求:表格中主颜和次颜是需要从缩略图上吸取颜,然后渲染块,将值传给后台 阅读详情
<template>
    <canvas id="colorCanvas" style="display:none"></canvas>
</template>
export default {
    methods:{
        getColor(url){
            let self = this;
            let img = new Image();
            let canvas = '', context = '', pixelData = ''
            canvas = document.getElementById('colorCanvas');
            context = canvas.getContext('2d');
            img.src = url;
            img.onload = function () {
              canvas.width = img.width;
              canvas.height = img.height;
              context.clearRect(0, 0, canvas.width, canvas.height);
              context.drawImage(img, 0, 0);
              pixelData = context.getImageData(0, 0, img.width, img.height).data;
              //获取最多色值的方法
              const temp = {}
              const len = pixelData.length

              let max = 0;
              let color = ''
              let i = 0
              while (i < len) {
              if (pixelData[i + 3] !== 0) {
                  const k = `${pixelData[i]}, ${pixelData[i + 1]}, ${pixelData[i + 2]}, ${(pixelData[i + 3] / 255)}`
                   temp[k] = temp[k] ? temp[k] + 1 : 1
                   if (temp[k] > max) {
                     max = temp[k]
                     color = k
                   }
                 }
                 i += 4
              }

              // 取所有像素平均值的方法
              let r = 0, g = 0, b = 0
              for (let row = 0; row < img.height; row++) {
                for (let col = 0; col < img.width; col++) {
                  r += pixelData[(img.width * row + col) * 4]
                  g += pixelData[(img.width * row + col) * 4 + 1]
                  b += pixelData[(img.width * row + col) * 4 + 2]
                }
              }

              // 计算平均值
              r /= img.width * img.height
              g /= img.width * img.height
              b /= img.width * img.height

              // 将结果取整
              r = Math.round(r)
              g = Math.round(g)
              b = Math.round(b)
              let color1 = r + ',' + g + ',' + b
              console.log(color,color1)
            }

            
          };
        };
        
        
    }

其实这两种方法都不是很完美,第一种在碰到渐变色背景+固定颜色文字的时候就会取到文字的颜色了,第二种则是在碰到png透明背景图片时会取到偏黑的色值。

vue根据图片提取主题/对颜进行分类 方法来获取信息,其中seletor为选择器,index为每几个像素提取一次像素信息0-9任意数值,这里我提取了五个主要颜信息,并保存在了colors[]数组中。最近发现taptap的主页首图是根据图片的颜动态的切换底的,颇有兴趣搜索了一下,了解到了相关原理,普遍是把图片转成canvas然后根据canvas的像素信息对颜进行采样。传入一组颜数据,可以根据提取到的颜数据匹配最相近的系,与主题保持同一种风格。莫兰迪系为自己传入的颜数据,可以匹配与传入的颜最相近的系,保持风格统一。 阅读详情

相关推荐

获取图片主题

当我们遇到根据背景图片来修改页面样式的时候,可能就需要去实现获取图片主题的功能。这里的数据我们可以自己做聚合、分析等等处理方式进行操作,最后得到我们自己想要的值。有兴趣可以自行去了解,我这里就使用了一个现成的库。首先引入quantize.js(模块化的项目中可以使用import或者require,这里只是方便演示)最后可以选择对前五的颜进行加权处理,也可以直接取排第一的颜(根据业务要求自行判断)0 是透明的,255 是完全可见的)所以我们要对数据进行处理,得到每个像素点的数据。

个人博客 916

js获得canvas中指定像素点的颜

插件描述:插件可以获得canvas中指定位置像素点的颜,支持返回多种格式的颜. 参考示例:http://www.jq22.com/jquery-info5319

Js之canvas获取图片调,近似,互补,以及根据图片获取主题方案详解、插件

Js之canvas获取图片调,近似,互补,以及根据图片获取主题方案详解、插件。

使用 Canvas API 获取图片

【代码】使用 Canvas API 获取图片

weixin_51188380的博客 659

canvas获取指定位置的颜

效果预览。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 1040

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

uniapp小程序获取图片主题

weixin_51213859的博客 824

使用ColorfulImg获取图片主题

文章摘取于作者:BrownHu,来源:稀土掘金

qq_44710145的博客 249

图像提取主题

工作时遇到一个需求:提取图片主题,通过某种映射关系,选取ui给出的对应颜。脑海中浮现如果只是纯前端如何实现呢? 一、思路与准备 利用canvas获取图像像素信息,然后用某种算法将主题提取出来。 1.1 了解Canvas画布真实像素原理 MDN: 事实上,你可以直接通过getImageData,返回一个imageData对象,获取场...

weixin_33974433的博客 947

图像主题的提取

工作时遇到一个需求:提取图片主题,通过某种映射关系,选取ui给出的对应颜。脑海中浮现如果只是纯前端如何实现呢? 一、思路与准备 利用canvas获取图像像素信息,然后用某种算法将主题提取出来。 1.1 了解Canvas画布真实像素原理 MDN: 事实上,你可以直接通过getImageData,返回一个imageData对象,获取场景像素数据。 imageData对象包含下列几个只读属性...

weixin_34217773的博客 578

微信小程序根据图片获取相应的主题

文章介绍了一个通过异步函数asyncgetRgba从图片中提取颜并生成渐变背景的方法。首先,通过getImageColor函数从图片URL中获取值,并将其转换为RGB格式。然后,使用这些RGB值构建一个线性渐变背景,并将其设置为页面数据。getImageColor函数通过请求阿里云存储的图片处理服务来获取图片的平均调,并将其转换为十六进制颜代码。文章还提到,除了阿里云存储,还可以使用第三方服务或Canvas来实现类似功能,后续会提供示例。

m0_49407241的博客 317

css和图片主题

这个想法是来源于「性能优化」中的骨架屏: 在图片居多的站点中,这将是非常nice的体验 —— 图片加载通常是比较让人难受的,好的骨架中一般占位图就是低像素的图片,即大体配和变化是和实际内容一致的。 有时候比如图片不固定的,那可以使用算法获取图片的主体颜(至少得是同系的吧),使用纯块占位。 再进一步想到,在一些“轻松”的场景下,我们可以让背景/页面主题跟随轮播图改变。至于效果嘛…你们可以想一下网易云音乐滑动切歌时的背景效果。 因为是不固定图片,所以我想到了四种方法: tensorflow.js

m0_67401920的博客 321

基于 Vue3和Canvas图片随机处理工具实现

基于Vue3和Canvas实现图片随机功能。

猫晨的技术小屋 1859

如何对前端图片主题进行提取?这篇文章详细告诉你

本文由云+社区发表 图片主题图片所占比例较大的页面中,能够配合图片起到很好视觉效果,给人一种和谐、一致的感觉。同时也可用在图像分类,搜索识别等方面。通常主题的提取都是在后端完成的,前端将需要处理的图片以链接或id的形式提供给后端,后端通过运行相应的算法来提取出主题后,再返回相应的结果。 这样可以满足大多数展示类的场景,但对于需要根据用户“定制”、“生成”的图片,这样的方式就有了一个上传...

QcloudCommunity的博客 937

通过canvas获取图片平均

通过canvas获取图片的平均像素,解决banner轮播图尺寸不一致的应用场景

qq_37575040的博客 886

如何对图片主题进行提取

一起网易云 ????网易云音乐想必是大家很熟悉的一款 app 了,毕竟大家在深夜都会网抑云开玩笑了,最近在网易云听歌时,发现了一个很有意思的特效:就是切换歌曲时,会根据当前封面替换背景。...

奇舞周刊 1300
上一篇: 公众号内使用开放标签wx-open-launch-weapp打开小程序 vue版
下一篇: js批量下载文件
夏天咯
博客等级 码龄9年 38粉丝 · 66原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值