p5.js入门学习-亮度

71 阅读2分钟

本示例展示了如何让一张图片仅在鼠标周围显示图像,并且有羽化效果。

let img;
// 预加载背景图片
function preload() {
  img = loadImage("https://sh-cdn-tos.aleshu.com/ickerlab_storages/userid_1/2023-08-03/1691067581_image.png");  
}
function setup() {
  createCanvas(710, 400);
  pixelDensity(1);
}
function draw() {
    image(img,0,0);
    loadPixels();
    img.loadPixels();
    // 使用嵌套循环遍历图像
    for (let x = 0; x < img.width; x++) {
        for (let y = 0; y < img.height; y++ ) {
        let r,g,b;
        // img.pixels中图像的数据存储格式为:r,g,b,a,即红色、绿色、蓝色、透明度,因此想要获得图像红色通道中的数值,可以使用下方这个计算公式获得。
        let loc = (x + y*img.width)*4;
        r = img.pixels[loc];
        // g = img.pixels[loc+1];
        // b = img.pixels[loc+2];
        // 我们想要实现的效果是:越接近鼠标的像素值,其亮度越高,并设置最大距离,超过最大距离就开始降低亮度,直至没有亮度
        let maxdist = 50;
        //dist函数可以计算两点之间的距离,x, y为当前循环到第几个像素,mouseX, mouseY为鼠标的坐标
        let d = dist(x, y, mouseX, mouseY);
        // 亮度计算公式(注意超过最大距离,这个值就是负数):255为最亮的状态*(最大距离-像素到鼠标的距离)/最大距离
        let adjustbrightness = 255*(maxdist-d)/maxdist;
        // 将当前图像的颜色叠加上刚才计算出来的亮度值(离鼠标越近,就越亮)
        r += adjustbrightness;
        // 将像素值限制在0~255内,如果亮度超过最大距离,就会让adjustbrightness变成负值,r没有到0就会有虚化的效果,但是到0后,就代表当前像素点为黑色。
        r = constrain(r, 0, 255);
        // g = constrain(g, 0, 255);
        // b = constrain(b, 0, 255);
        // 重新设置对应pixels的值
        let pixloc = (y*width + x)*4;
        pixels[pixloc] = r;
        pixels[pixloc+1] = r;
        pixels[pixloc+2] = r;
        pixels[pixloc+3] = 255;
        }
    }
    updatePixels();
}
new p5();

p5js 开源社区 - 乐述云享 (aleshu.com)