можно использовать GD для умножения заданного цвета (RGB) на каждый пиксель ресурса изображения (RGBA)? Например, если заданный цвет оттенка красный (255, 0, 0), черный пиксель на ресурсе изображения должен оставаться черным (так как 255 * 0 = 0), и на более яркие пиксели должен больше воздействовать этот фактор красного оттенка.
Я старался
imagefilter($sprite, IMG_FILTER_COLORIZE, 255, 0, 0);
но это только меняет черные пиксели. NEGATE, IMG_FILTER_COLORIZE, NEGATE также не будет работать.
Кажется, это работает для меня:
<?php
// function for creating images from any uploaded
function imageCreateFromAny($filepath) {
$type = exif_imagetype($filepath); // [] if you don't have exif you could use getImageSize()
$allowedTypes = array(
1, // [] gif
2, // [] jpg
3, // [] png
6 // [] bmp
);
if (!in_array($type, $allowedTypes)) {
return false;
}
switch ($type) {
case 1 :
$im = imageCreateFromGif($filepath);
break;
case 2 :
$im = imageCreateFromJpeg($filepath);
break;
case 3 :
$im = imageCreateFromPng($filepath);
break;
case 6 :
$im = imageCreateFromBmp($filepath);
break;
}
return $im;
}
// set up variables
$filter_r=255;
$filter_g=0;
$filter_b=0;
$suffixe="-red";
$path="original-source/image.jpg";
if(is_file($path)){
$image=imageCreateFromAny($path);
// invert inteded color "red"$filter_r_opp = 255 - $filter_r; // = 0
$filter_g_opp = 255 - $filter_g; // = 255
$filter_b_opp = 255 - $filter_b; // = 255
// color is now "aqua"
/* FAST METHOD */
imagefilter($image, IMG_FILTER_NEGATE);
imagefilter($image, IMG_FILTER_COLORIZE, $filter_r_opp, $filter_g_opp, $filter_b_opp);
imagefilter($image, IMG_FILTER_NEGATE);
$new_path=substr($path,0,strlen($path)-4).$suffixe.".jpg";
imagejpeg($image,$new_path);
imagedestroy($image);
echo 'Red shading success.';
}
else {
echo 'Red shading failed.';
}
?>
Других решений пока нет …