我正在尝试在我的服务器上着色黑白图片。
我尝试使用多种方法执行此操作,并且唯一一种通过过滤器IMG_FILTER_COLORIZE进行gd imagefilter
的工作。
它确实为图像着色的颜色与我想要的颜色完全相同,但它会丢失图像上的所有细节,就好像它只是修剪了不够黑和稀疏的黑点所有的黑线,使它们几乎看不见。这就是我在说的:
使用此代码
实现了此结果$im=imagecreatefromjpeg($orig_file);
imagefilter($im, IMG_FILTER_COLORIZE, 71, 92, 10);
imagejpeg($im, $output_file, 95);
为什么会这样?我有什么其他方法可以为图像着色吗?我的原始图像非常大,我不能迭代它,因为它太慢了;这就是我试图使用可以执行此操作的库的原因
答案 0 :(得分:0)
我已经在Imagick和compositeImage的帮助下成功达到了预期的效果。这是结果
我是如何实现它的一种技巧只适用于非常特殊的条件 - 需要背景为白色,前面只有黑色/灰色物体(或完全相反)。这种技术不适用于透明度
的背景想法是在下面有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);
希望这会帮助别人