0

只是为了我的问题,让我们说这个功能:

int imagecolorexact ( resource $image , int $red , int $green , int $blue )

我们可以像这样简单地调用它:

$index = imagecolorexact($image, 0, 0, 0);

显然,因为我们正在讨论的示例是关于 RGB 颜色的,因此 $red、$green 和 $blue 的值介于 0 和 255 之间。此函数返回具有该 rgb 化合物的像素的索引。

我需要的是获取它们的复合不是(0、0、0)的所有像素的索引,所以我想这样做:

for($i = 0; $i <= 255; $i++) {
    for($j = 0; $i <= 255; $i++) {
        for($k = 0; $i <= 255; $i++) {
            $index[] = imagecolorexact($image, $i, $j, $k);
        }
    }
}

但这将运行 255*255*255 次,我很怀疑。

我的问题是:有没有办法简化这个?

我为什么要问这个? 我正在尝试将图像中的所有黑色像素更改为黄色,因此将是:

$image = imagecreatefrompng("./test.png");
imagecolorset($image, imagecolorexact($image, 0, 0, 0), 255, 255, 0);

而且我需要将同一图像中的所有非黑色像素更改为黑色,因此(我想?):

for($i = 1; $i <= 255; $i++) {
    for($j = 1; $i <= 255; $i++) {
        for($k = 1; $i <= 255; $i++) {
            $index = imagecolorexact($image, $i, $j, $k);
            imagecolorset($new, $value, 0, 0, 0);
        }
    }
}

因此,我问是否有更好的优化方法?

4

0 回答 0