PHP 5.4.36 Released

Imagick::colorizeImage

(PECL imagick 2.0.0)

Imagick::colorizeImageMezcla el color de relleno con la imagen

Descripción

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

Mezcla el color de relleno de cada píxel con la imagen.

Parámetros

colorize

Objeto ImagickPixel o una cadena que contiene el color

opacity

Objeto ImagickPixel o un valor float que contiene el valor de la opacidad. 1.0 es completamente opaco y 0.0 es completamente transparente.

Valores devueltos

Devuelve TRUE en caso de éxito.

Errores/Excepciones

Lanza ImagickException en caso de error.

Historial de cambios

Versión Descripción
2.1.0 Ahora se permite que una cadena represente el color como el primer parámetro y que un valor float represente el valor de la opacidad como el segundo parámetro. Versiones anteriores sólo permitían objetos ImagickPixel.

add a note add a note

User Contributed Notes 5 notes

up
5
php at lfbittencourt dot com
2 years ago
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(0, 0, $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;

?>
up
1
olav at redwall dot ee
1 year ago
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(0, 0, $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(false, Imagick::CHANNEL_ALL);
       
$this->setImageClipMask($alphaChannel);

       
$clone = $this->clone();
       
$clone->compositeImage($temporary, $composite_flag, 0, 0);
       
$clone->setImageOpacity($alpha);

       
$this->compositeImage($clone, Imagick::COMPOSITE_DEFAULT, 0, 0);
    }
}
?>
up
1
talkol at gmail dot com
2 years ago
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.
up
0
Alex Lokhman [VisioN]
8 months ago
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();
?>
up
-1
lsmartinez at gmail dot com
5 years ago
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;
?>
To Top