PHP 8.1.0 Beta 1 available for testing

Imagick::colorizeImage

(PECL imagick 2, PECL imagick 3)

Imagick::colorizeImageGörüntünün her pikseline dolgu rengini karıştırır

Açıklama

public Imagick::colorizeImage(mixed $renk, bool $matlık = false): bool

Görüntünün her pikseline dolgu rengini karıştırır.

Değiştirgeler

renk

Renklendirme amacı ile kullanılacak renk dizgesi veya ImagickPixel nesnesi.

matlık

Matlık değerini içeren bir gerçek sayı veya ImagickPixel nesnesi. Tam matlık için 1.0; tam şeffaflık için 0.0 kullanın.

Dönen Değerler

Başarı durumunda true döner.

Hatalar/İstisnalar

Hata durumunda bir ImagickException istisnası oluşur.

Sürüm Bilgisi

Sürüm: Açıklama
PECL imagick 2.1.0 Artık renk olarak rengi ifade eden bir dizge belirtilebiliyor. Evvelce sadece bir ImagickPixel nesnesi belirtilebiliyordu.

Örnekler

Örnek 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();
}

?>

add a note add a note

User Contributed Notes 5 notes

up
7
Alex Lokhman [VisioN]
7 years 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
6
php at lfbittencourt dot com
9 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
2
olav at redwall dot ee
7 years 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
9 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
-2
lsmartinez at gmail dot com
12 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