私の質問のために、この関数を言ってみましょう:
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);
}
}
}
したがって、より良い最適化された方法があるかどうかを尋ねていますか?