我有以下图片:http://i.stack.imgur.com/mM8cY.png
我想要做的是像在Photoshop中一样创建“颜色叠加”效果。我需要某种代码,允许我将每个白色像素更改为RGB数字范围为0-255的指定值。我听说过ImageMagick类,但我无法在任何地方找到它,而且我也不知道如何使用该类。我目前正在尝试使用imagefilter
,但它不能用于白色图像。这是我目前的代码:
<?php
$match = array();
if (isset($_GET['c']) && preg_match('/^#?(?:[A-Fa-f0-9]{2}){3}$/',$_GET['c'],$match)){
$match = str_split($match[0],2);
foreach ($match as $k=>$m){ $match[$k] = intval($match[$k],16); }
$img = imageCreateFromPng('splat.png');
$background = imagecolorallocate($img, 0, 0, 0);
imagecolortransparent($img, $background);
imagealphablending($img, false);
imagesavealpha($img, true);
//Transformation code
imagefilter($img, IMG_FILTER_COLORIZE, $match[0], $match[1], $match[2]);
header('Content-type: image/png');
imagePng($img);
exit;
}
?>
答案 0 :(得分:0)
我找到了解决方案。我所做的只是 - 使用Photoshop - 我在图像上添加了红色叠加层,现在它看起来像这样:http://i.stack.imgur.com/mVARN.png
然后使用以下PHP代码:
<?php
$match = array();
$color = isset($_GET['c']) ? $_GET['c'] : false;
if ($color === false) isset($_GET['color']) ? $_GET['color'] : false;
$color = preg_replace('/^#/','',$color);
if (strlen($color) == 3) $color = $color[0].$color[0].$color[1].$color[1].$color[2].$color[2];
if (preg_match('/^(?:[A-Fa-f0-9]{2}){3}$/',$color,$match)){
$match = str_split($match[0],2);
foreach ($match as $k=>$m){ $match[$k] = intval($match[$k],16); }
// Load image
$img = imageCreateFromPng('splat.png');
$background = imagecolorallocate($img, 0, 0, 0);
imagecolortransparent($img, $background);
imagealphablending($img, false);
imagesavealpha($img, true);
imagefilter($img, IMG_FILTER_COLORIZE, intval( intval($match[0],16) - 255 ,16), $match[1], $match[2]);
header('Content-type: image/png');
imagePng($img);
exit;
}
?>
这里的关键是我从输入中减去了255个红色值:
intval( intval($match[0],16) - 255 ,16)
并且正确地改变了颜色。