好吧,我想我可能误解了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);
有人知道哪里出了问题,或者有其他方法吗?
着色效果很奇怪。我认为这实际上是一个基于向量的运算。听起来你只是想调整颜色,通过在图像上画一个彩色矩形可以更容易地做到这一点。
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);
}
好的,我通过另一种方式找到了这个问题的解决方案。这里的代码
$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%透明。然后我将图像压平并保存。