在图像中找到指定颜色的x,y位置?

时间:2012-11-05 16:28:19

标签: php image

有没有办法在PHP中获取图像中颜色的x,y位置? 例如:在此图片中

enter image description here

我可以得到起点,即颜色RED的x,y位置。

我需要为用户创建一个选项来更改图像中特定部分的颜色。如果用户想要在此图像中将红色更改为蓝色。我使用imagefill()函数来更改颜色,但它需要x,y坐标才能工作。希望这是有道理的。

1 个答案:

答案 0 :(得分:2)

尝试这样的事情:

// applied only to a PNG images, You can add the other format image loading for Yourself
function changeTheColor($image, $findColor, $replaceColor) {
    $img = imagecreatefrompng($image);
    $x = imagesx($img);
    $y = imagesy($img);
    $newImg = imagecreate($x, $y);
    $bgColor = imagecolorallocate($newImg, 0, 0, 0); 

    for($i = 0; $i < $x; $i++) {
        for($j = 0; $j < $y; $j++) {
            $ima = imagecolorat($img, $i, $j);
            $oldColor = imagecolorsforindex($img, $ima);
            if($oldColor['red'] == $findColor['red'] && $oldColor['green'] == $findColor['green'] && $oldColor['blue'] == $findColor['blue'] && $oldColor['alpha'] == $findColor['alpha'])
                $ima = imagecolorallocatealpha($newImage, $replaceColor['red'], $replaceColor['green'], $replaceColor['blue'], $replaceColor['alpha']);
            }
            imagesetpixel($newImg, $i, $j, $ima);
        }
    }

    return imagepng($newImg);
}

我们在此期望$findColor$replaceColor是具有此结构的数组:

$color = array(
    'red' => 0,
    'green' => 0,
    'blue' => 0,
    'alpha' => 0,
);

没有尝试过代码,但至少应该以正确的方式指出你。它循环遍历每个像素,检查该像素的颜色,如果它是我们要查找的那个,则将其替换为$replaceColor。如果没有,则将相同的颜色放置在同一位置的新图像中。

因为它使用了两个for循环,所以可能是时间和内存消耗在大图像上。