php Imagick彩色叠加


php Imagick color overlay

好吧,我想我可能误解了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%透明。然后我将图像压平并保存。