php Imagick颜色叠加

时间:2014-09-30 19:37:17

标签: php imagick

好吧,我想我可能在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);

有人知道出了什么问题,还是有其他方法可以做到这一点?

2 个答案:

答案 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%透明。然后我将图像展平并保存。