好吧,我想我可能在Imagick中误解了colorizeImage的功能。 我试图为图像添加70%的黑色。但是代码只有在它的1然后它只是一个黑色图像时才有效。
但是从手册中我似乎无法找到问题。 http://php.net/manual/en/imagick.colorizeimage.php
$backdropInFile = JPATH_BASE . '/images/movies/'.$_POST["movieid"].'/backdrop'.$movie['backdrop_path'];
$backdropOutFile = JPATH_BASE . '/images/movies/'.$_POST["movieid"].'/backdrop/'.$_POST["movieid"].'_backdrop.jpg';
$backdropimage = new Imagick($backdropInFile);
$backdropimage->setImageCompression(Imagick::COMPRESSION_JPEG);
$backdropimage->setImageCompressionQuality(60);
$backdropimage->colorizeImage('#000',0.9);
$backdropimage->thumbnailImage(1700, null);
$backdropimage->writeImage($backdropOutFile);
有人知道出了什么问题,还是有其他方法可以做到这一点?
答案 0 :(得分:0)
着色很奇怪。它实际上是我认为的基于矢量的操作。听起来你只想调整颜色,通过在图像上绘制彩色矩形可以更容易地做到这一点。
function colorizeImagick(Imagick $imagick, $color, $alpha = 1) {
$draw = new ImagickDraw();
$draw->setFillColor($color);
if (is_float($alpha)) {
$draw->setFillAlpha($alpha);
}
$width = $imagick->getImageWidth();
$height = $imagick->getImageWidth();
$draw->rectangle(0, 0, $width, $height);
$imagick->drawImage($draw);
}
答案 1 :(得分:0)
好的,我通过另一种方式找到问题的解决方案。 这里是代码
$backdropInFile = JPATH_BASE . '/images/movies/'.$_POST["movieid"].'/backdrop'.$movie['backdrop_path'];
$backdropOutFile = JPATH_BASE . '/images/movies/'.$_POST["movieid"].'/backdrop/'.$_POST["movieid"].'_backdrop.jpg';
$backdropimage = new Imagick();
$backdropimage->setBackgroundColor('black');
$backdropimage->readimage($backdropInFile);
$backdropimage->setImageOpacity(0.25);
$backdropimage->setImageCompression(Imagick::COMPRESSION_JPEG);
$backdropimage->setImageCompressionQuality(60);
$backdropimage->thumbnailImage(1700, null);
$backdropimage = $backdropimage->flattenImages();
$backdropimage->writeImage($backdropOutFile);
我没有使用着色,我在打开文件之前将背景颜色设置为黑色。然后我将图像设置为25%透明。然后我将图像展平并保存。