PHP GD: умножение цветов изображения с оттенком цвета

можно использовать GD для умножения заданного цвета (RGB) на каждый пиксель ресурса изображения (RGBA)? Например, если заданный цвет оттенка красный (255, 0, 0), черный пиксель на ресурсе изображения должен оставаться черным (так как 255 * 0 = 0), и на более яркие пиксели должен больше воздействовать этот фактор красного оттенка.

Я старался

imagefilter($sprite, IMG_FILTER_COLORIZE, 255, 0, 0);

но это только меняет черные пиксели. NEGATE, IMG_FILTER_COLORIZE, NEGATE также не будет работать.

0

Решение

Кажется, это работает для меня:

<?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.';
}

?>
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector