【问题标题】:change color of multiple different rgb colors更改多种不同 rgb 颜色的颜色
【发布时间】:2023-03-21 18:20:01
【问题描述】:

大家好,我正在尝试使用 php 重新着色以下图像:

我想让我的用户在我的 php 应用程序中单击几下就可以更改横幅的颜色。所以我使用了我得到的这个小实验脚本here

这是我更改图像的一种 rgb 颜色的脚本:

$imgname = "test.png";
$im = imagecreatefrompng($imgname);
imagealphablending($im, false);
for ($x = imagesx($im); $x--;) {
    for ($y = imagesy($im); $y--;) {
        $rgb = imagecolorat($im, $x, $y);
        $c = imagecolorsforindex($im, $rgb);
        if ($c['red'] == 0 && $c['green'] == 94 && $c['blue'] == 173) { 
            $colorB = imagecolorallocatealpha($im, 255, 0, 255, $c['alpha']);
            imagesetpixel($im, $x, $y, $colorB);
        }
    }
}
imageAlphaBlending($im, true);
imageSaveAlpha($im, true);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);

问题是横幅的蓝色是多种不同的 rgb 颜色,所以我怎样才能一次更改所有蓝色 rgb 颜色而不影响其他颜色。

【问题讨论】:

    标签: php image-processing gd


    【解决方案1】:

    只需定义一个适用于所有所需颜色的阈值。

    变化:

     if ($c['red'] == 0 && $c['green'] == 94 && $c['blue'] == 173)
    

    类似于:

    if ($c['red'] == 0 && $c['green'] == 94 && $c['blue'] > 173 && $c['blue'] < 240)
    

    对所有 3 个通道执行此操作并测试最适合的颜色范围。

    【讨论】:

    • 我会尝试从一个非常高的蓝色通道开始的好方法吗?
    • 浅蓝色具有较高的蓝色值,较深的蓝色值可能具有较低的蓝色值。但它们高于红色和绿色值。如果您猜不出合适的范围,请尝试打印颜色值。
    • 是的,我做了一个循环输出所有颜色,现在我可以看到我可以使用你的解决方案的范围和范围,谢谢。
    猜你喜欢
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 2012-01-20
    • 2018-05-31
    • 1970-01-01
    • 2013-03-26
    相关资源
    最近更新 更多