Смешивание цветов GD - PHP - PullRequest
0 голосов
/ 09 ноября 2011

Хорошо, у меня есть изображение 64x64 пикселей, некоторые пиксели белые, некоторые серые, а некоторые темнее, поэтому у меня есть еще одно изображение 64x64 с некоторыми желтыми пикселями, которое определит, какие пиксели первого изображения должны быть изменены.До сих пор я мог изменить цвета на первом изображении с помощью следующего кода, но дело в том, что я понятия не имею, как «смешать» данный цвет с цветами, которые уже были на первом изображении.

ДляНапример, если пиксель белый (255,255,255), а новый цвет - красный (255,0,0), результат будет (255,0,0), но если пиксель немного темнее, новый красный также должен быть темнее,Есть идеи?

$image = 'o1.png';
$overlay = 'o2.png';

$background = imagecreatefrompng($image);

imagealphablending($background, true);

// Create overlay image
$overlay = imagecreatefrompng($overlay);

// get size
$size = getimagesize("o2.png");
$L=$size[0];
$H=$size[1];

for($j=0;$j<$H;$j++){
    for($i=0;$i<$L;$i++){

        $rgb = imagecolorat($overlay, $i, $j);

        $red = (isset($_GET['r']) ? $_GET['r'] : 0);
        $green = (isset($_GET['g']) ? $_GET['g'] : 0);
        $blue = (isset($_GET['b']) ? $_GET['b'] : 0);

        $r = ($rgb >> 16) & 0xFF;
        $g = ($rgb >> 8) & 0xFF;
        $b = $rgb & 0xFF;

        if(($r==255)&&($g==255)&&($b==0)) {

            $color = imagecolorallocate($background, $red, $green, $blue);
            imagesetpixel($background, $i, $j, $color);

        }

    }
}


header("Content-type: image/png");
header("Content-Disposition: filename=" . $image);

imagepng($background);

// Destroy the images
imagedestroy($background);
imagedestroy($overlay);

1 Ответ

2 голосов
/ 09 ноября 2011

Я думаю, вы говорите о режиме многократного смешивания. Формула для этого согласно Википедии :

Цвет результата = (верхний цвет) * (нижний цвет) / 255

При использовании этой формулы полученное изображение будет темнее, если цвет фона темнее.

...