文字

Imagick::colorizeImage

(PECL imagick 2.0.0)

Imagick::colorizeImageBlends the fill color with the image

说明

bool Imagick::colorizeImage ( mixed $colorize , mixed $opacity )

Blends the fill color with each pixel in the image.

参数

colorize

ImagickPixel object or a string containing the colorize color

opacity

ImagickPixel object or an float containing the opacity value. 1.0 is fully opaque and 0.0 is fully transparent.

返回值

成功时返回 TRUE

错误/异常

错误时抛出 ImagickException。

更新日志

版本 说明
2.1.0 Now allows a string representing the color as the first parameter and a float representing the opacity value as the second parameter. Previous versions allow only an ImagickPixel objects.

范例

Example #1 Imagick::colorizeImage()

<?php
function  colorizeImage ( $imagePath $color $opacity ) {
    
$imagick  = new \ Imagick ( realpath ( $imagePath ));
    
$opacity  $opacity  255.0 ;
    
$opacityColor  = new \ ImagickPixel ( "rgba(0, 0, 0,  $opacity )" );
    
$imagick -> colorizeImage ( $color $opacityColor );
    
header ( "Content-Type: image/jpg" );
    echo 
$imagick -> getImageBlob ();
}

?>

用户评论:

[#1] Alex Lokhman [VisioN] [2014-03-22 14:35:00]

If you're looking for a solution to fill the image with a solid color, preserving background transparency, here is one way:

<?php
$im 
= new Imagick('image.png');
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$im->setImageBackgroundColor('color');
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
$im->writeImage('output.png');
$im->destroy();
?>

[#2] olav at redwall dot ee [2013-12-18 12:24:15]

To improve upon "php at lfbittencourt dot com"'s solution, this one blends the composited color, and takes opacity into account as well.

<?php
class YourImagick extends Imagick
{
    public function 
colorize($color$alpha 1$composite_flag Imagick::COMPOSITE_COLORIZE)
    {
        
$draw = new ImagickDraw();

        
$draw->setFillColor($color);

        
$geometry $this->getImageGeometry();
        
$width $geometry['width'];
        
$height $geometry['height'];

        
$draw->rectangle(00$width$height);

        
$temporary = new Imagick();
        
$temporary->setBackgroundColor(new ImagickPixel('transparent'));
        
$temporary->newImage($width$height, new ImagickPixel('transparent'));
        
$temporary->setImageFormat('png32');
        
$temporary->drawImage($draw);

        
$alphaChannel $this->clone();
        
$alphaChannel->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
        
$alphaChannel->negateImage(falseImagick::CHANNEL_ALL);
        
$this->setImageClipMask($alphaChannel);

        
$clone $this->clone();
        
$clone->compositeImage($temporary$composite_flag00);
        
$clone->setImageOpacity($alpha);

        
$this->compositeImage($cloneImagick::COMPOSITE_DEFAULT00);
    }
}
?>

[#3] php at lfbittencourt dot com [2012-05-11 13:26:10]

Do you want a color overlay with TRUE opacity control? Try this:

<?php

class YourImagick extends Imagick
{
    public function 
colorize($color$alpha 1)
    {
        
$draw = new ImagickDraw();

        
$draw->setFillColor($color);

        if (
is_float($alpha)) {
            
$draw->setFillAlpha($alpha);
        }

        
$geometry $this->getImageGeometry();
        
$width $geometry['width'];
        
$height $geometry['height'];

        
$draw->rectangle(00$width$height);

        
$this->drawImage($draw);
    }
}

?>


How to use:

<?php

$imagick 
= new YourImagick('example.png');

$imagick->colorize('#ffcc00'0.35);

header('Content-type: image/png');

echo 
$source;

?>

[#4] talkol at gmail dot com [2011-12-28 07:19:28]

When you're using an image with an alpha channel (for example a transparent png), a value of 1.0 will return a completely transparent image, but a value of 1 works just fine.

[#5] lsmartinez at gmail dot com [2009-04-08 09:42:16]

simplest example

<?php
$nombre 
'001-4-0043.jpg';
$img = new Imagick($nombre);
$img->negateImage(false);
//$pixblu = new ImagickPixel('#000040');
$img->colorizeImage('#0000b0',1.0);
header('content-type: image/jpeg');
echo 
$img;
?>

上一篇: 下一篇: