我的服务器上存有黑白JPEG的集合。这些图像是基于符号的,其中符号是白色背景上的黑色线条的集合。
我正在尝试使用GD根据传递的变量动态地用另一种颜色替换黑色。目前,我是:
将JPEG格式化为:$ image = imagecreatefromjpeg($ imgURL), 通过PHP将HEX代码(例如#FF0000)转换为RGB,
然后将这些变量提供给:
private function colourize_image($image, $colour, $contrast = 0) {
if (!$image) { return false; }
imagealphablending($image, true);
imagesavealpha($image, true);
# Convert hex colour into RGB values
$r = hexdec('0x' . $colour{0} . $colour{1});
$g = hexdec('0x' . $colour{2} . $colour{3});
$b = hexdec('0x' . $colour{4} . $colour{5});
imagefilter($image, IMG_FILTER_COLORIZE, $r, $g, $b);
imagefilter($image, IMG_FILTER_CONTRAST, $contrast);
# Return the GD image object
return $image;
}
由于某种原因,该功能根本不起作用(它不会覆盖新颜色)。
有人可以告诉我哪里出错了吗?
非常感谢。
答案 0 :(得分:0)
如果颜色是唯一的问题,那么你可以试试这个:
<php>
//SNIP $color = preg_replace('/^#/','',$color); //Get rid of "#" if it's there $r = hexdec("0x{$color[0]}{$color[1]}"); $g = hexdec("0x{$color[2]}{$color[3]}");
$b = hexdec("0x{$color[4]}{$color[5]}"); //SNIP</php>
答案 1 :(得分:0)
您可以使用imageistruecolor
功能查明您刚刚加载的JPEG是真彩色还是基于调色板。如果它不是真彩色,您可以创建相同宽度和高度的新真彩色图像,并将旧图像复制到:
$width = imagesx($jpeg);
$height = imagesy($jpeg);
$image = imagecreatetruecolor($width, $height);
imagecopy($jpeg, $image, 0, 0, 0, 0, $width, $height);
然后您应该能够应用新颜色。