『XXG笔记』前端jscanvas获取图片主体颜色

『XXG笔记』前端jscanvas获取图片主体颜色,第1张

🟥🟧🟨🟩🟦🟪🟫⬛⬜ 🟥 前言!

最近!(其实也不是最近了,之前也…)
我看了Procreate的官方画展网站:https://folio.procreate.art/showcase

Procreate是一款ipad的绘画软件

当我的鼠标 移动到图片上面去的时候,他会有一个图片浮空的阴影!

其实制作图片阴影是非常简单的,css3里面就有一个box-shadow

但是这里的关键是!他会根据图片里的一个【整体颜色】来做阴影。

这样每张图片的阴影就会显得非常好看了!

红色的图片红色的阴影,黄色的图片黄色的阴影!非常有立体感!非常美!

🟥 那么问题就来了! 如何获取图片的颜色如何根据图片的颜色计算出一个综合颜色 🟧 HMTL5里canvas的getImageData

canvas教程:https://www.runoob.com/html/html5-canvas.html

canvas的getImageDate可以得到canvas画布里每个像素点的颜色!

把图片丢进canvas的画布里用canvas的getImageDate属性获得画布每个像素点的信息集根据信息集做遍历,计算rgba里每一个值的平均值,以此获得一个综合颜色!
<img src="./img/test.jpg" width="200px" id="scream">
<canvas id="myCanvas" width="200" height="300" style="border:1px solid #c3c3c3;">canvas> 
var img = document.getElementById("scream"); //图片节点
var c = document.getElementById("myCanvas");  //canvas元素

function rgba() {
    c.width = img.width
    c.height = img.height
    var ctx = c.getContext("2d"); 
    //getContext("2d") 对象是内建的 HTML5 对象,
    //拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
    
    ctx.drawImage(img, 0, 0, c.width, c.height); 
    //把图片画入画布(图片节点,左上角开始的x,y, 画入图片的宽,高)

    var imgData = ctx.getImageData(0, 0, c.width, c.height);
     //getImageDate 得到画布里的图片信息(画布的四个角)

    // console.log(imgData) //看一下取出来的数据对象!

    // 取所有像素的平均值
    let r = 0;
    let g = 0;
    let b = 0;
    let a = 0;
    for (let row = 0; row < c.height; row++) {
        for (let col = 0; col < c.width; col++) {
            r += imgData.data[((c.width * row) + col) * 4];
            g += imgData.data[((c.width * row) + col) * 4 + 1];
            b += imgData.data[((c.width * row) + col) * 4 + 2];
            a += imgData.data[((c.width * row) + col) * 4 + 3];
        }
    }

    // 求取平均值
    r /= (c.width * c.height);
    g /= (c.width * c.height);
    b /= (c.width * c.height);
    a /= (c.width * c.height);

    // 将最终的值取整
    r = Math.round(r);
    g = Math.round(g);
    b = Math.round(b);
    a = Math.round(a);

    let rgba = {
        r,
        g,
        b,
        a,
    }
    console.log(rgba)
    return rgba
}
🟧 首先!这是网站的👇


把图片标签删掉,下面有一个底

可以看到rgb是(110,57,124)

🟧 这是我们写所得的👇

成功!

🎊🍾🥳🎉

当然这就是这篇文章的主要解决的问题了
【获得图片的主体颜色】

后面我自己还想把这种方法封装起来,或者制作一个vue的ui组件。这些就留给下一篇文章吧~

对了 网上还有别的计算【主体颜色】的方式!大家可以继续自行搜索。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/945123.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-18
下一篇2022-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存