用JS写一个替换/修改图片颜色值的工具(1)

本文介绍了作者开发的一个小工具,用于在Photoshop之外实现颜色值的精确选择和替换,通过JavaScript操作图片像素数据,展示了核心代码并分享了实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PS软件里也有这个功能,但是总感觉用不习惯,并且也没法精准挑选要更换其中哪一个颜色值

于是就自己写一个小工具来实现这个功能.

PS:也可能是我本人不是很熟悉PS软件的原因

一、第一步,先将图片读取出来

先随便改一下图片的颜色,达到效果,能改,并且能将修改后的图片完整保存下来,第一步的工作已完成,接下来下一篇再继续增加选择替换颜色值的功能。

核心的代码如下:


            // 将源图片复制到画布上
            ctx.drawImage(img, 0, 0, width, height);
            // 获取画布的像素信息
            let imageData = ctx.getImageData(0, 0, width, height), data = imageData.data;
            // 对像素集合中的单个像素进行循环,每个像素是由4个通道组成,所以要注意
            let i = 0;
            while (i < data.length) {
                let r = data[i++],
                    g = data[i++],
                    b = data[i++],
                    a = data[i++];

                //计算透明度
                let alp = (255 - r) / (255 - threshold);
                //判断是否透明
                //let isTransparent = (r == 255 && g == 255 && b == 255 && a == 255);
                let isTransparent = (r == 0 && g == 0 && b == 0 && a == 0);
                if (isTransparent) {//透明值不处理
                    //console.log('========',data);
                    //data[i - 1] = 0;
                } else {

                    //console.log('========',r);
                    //console.log('========',g);
                    //console.log('========',b);
                    //console.log('========',a);
                    //console.log('********************************');
                    data[i - 4] = newR;
                    //data[i - 3] = newG;
                    //data[i - 2] = newB;
                    //data[i - 1] = a !== 255 ? 255 - a : alp * 255; //处理透明的图片和不透明的图片
                }
            }
            // 将修改后的代码复制回画布中
            ctx.putImageData(imageData, 0, 0);
            // 图片导出为 png 格式
            let imgType = "png";
            let imgData = canvas.toDataURL(imgType);
            console.log(imgData); // 生成base64
            //callback && callback(imgData);

            var resultElement = document.getElementById('cropped-result');
            resultElement.src = imgData;

这个小工程也先上传到资源库里:

https://download.csdn.net/download/Highning0007/88852282

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bricke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值