php image filter" colorize"破坏图像细节

时间:2014-03-11 14:22:01

标签: php image gd imagefilter colorize

我正在尝试在我的服务器上着色黑白图片。

我尝试使用多种方法执行此操作,并且唯一一种通过过滤器IMG_FILTER_COLORIZE进行gd imagefilter的工作。

它确实为图像着色的颜色与我想要的颜色完全相同,它会丢失图像上的所有细节,就好像它只是修剪了不够黑和稀疏的黑点所有的黑线,使它们几乎看不见。这就是我在说的:

original image colorized picture

使用此代码

实现了此结果
$im=imagecreatefromjpeg($orig_file);
imagefilter($im, IMG_FILTER_COLORIZE, 71, 92, 10);
imagejpeg($im, $output_file, 95);

为什么会这样?我有什么其他方法可以为图像着色吗?我的原始图像非常大,我不能迭代它,因为它太慢了;这就是我试图使用可以执行此操作的库的原因

1 个答案:

答案 0 :(得分:0)

我已经在Imagick和compositeImage的帮助下成功达到了预期的效果。这是结果

original picture desired result

我是如何实现它的一种技巧只适用于非常特殊的条件 - 需要背景为白色,前面只有黑色/灰色物体(或完全相反)。这种技术不适用于透明度

的背景

想法是在下面有2层 - 具有原始灰度图像的层和顶层 - 完全填充所需的颜色。然后你使用“COMPOSITE_LIGHTEN”合成这些图像(你可以使用其他方法,例如变暗 - 如果你在黑色背景上有白色物体)

这是代码

$base_color="#475c0a";
$im=new Imagick($orig_file);

$im2 = new Imagick();
$im2->newImage($im->getImageWidth(), $im->getImageHeight(), new ImagickPixel($base_color) );

$im->compositeImage($im2, Imagick::COMPOSITE_LIGHTEN, 0, 0);

$im->writeImage($new_image_path);

希望这会帮助别人