Для выполнения данной задачи нашел в сети интересную реализацию, которая мне очень понравилась. Следующий код сделает из любого изображения черно-белое:
$img_src = "ваша картинка.png";
$original = imagecreatefrompng($img_src); // если картинка не png меняем на нужную функцию
$im = imagecreate(imagesx($original), imagesy($original));
for ($i = 0; $i <= 255; $i++) {
$palette[$i] = imagecolorallocate($im, $i, $i, $i);
}
for($x = 0; $x < imagesx($original); $x++) {
for($y = 0; $y < imagesy($original); $y++) {
$rgb = imagecolorat($original, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8 ) & 0xFF;
$b = $rgb & 0xFF;
imagesetpixel($im, $x, $y, $palette[grayscale($r, $g, $b)]);
}
}
imagepng($im, 'result.png');
function grayscale($r, $g, $b) {
return 0.199*$r + 0.587*$g + 0.114*$b;
}
спасибо автору