Imagemagick背景渐变

时间:2017-02-24 14:08:28

标签: php imagemagick

我有一些基本代码可以生成具有扎实背景的图像。但是我想知道如何制作渐变。这是我的代码:

<?php
function process($inputdata)
{
/* Create some objects */
$image = new Imagick();
$draw = new ImagickDraw();
$pixel = new ImagickPixel( 'gray' );

/* New image */
$image->newImage(400, 300, $pixel);

/* Black text */
$draw->setFillColor('black');

/* Font properties */
$draw->setFont('Bookman-DemiItalic');
$draw->setFontSize( 30 );

/* Create text */
$image->annotateImage($draw, 10, 45, 0, $inputdata);

/* Give image a format */
$image->setImageFormat('png');

/* Output the image with headers */
header('Content-type: image/png');
echo $image;
return;
}

我能找到的最接近的代码是这样的:

$gradient = new Imagick();
$gradient->newPseudoImage(400, 300, 'gradient:blue-red');

但我不知道如何将渐变与文本结合起来。

1 个答案:

答案 0 :(得分:1)

请使用compositeImage功能。它将一个图像组合成另一个图像使用渐变创建一个Imagick实例,使用文本和Alpha通道背景创建第二个,并将它们组合成一个。

参考:http://php.net/manual/en/imagick.compositeimage.php

$text = 'The quick brown fox jumps over the lazy dog';
$width = 1000;
$height = 1000;

$textBackground = new ImagickPixel('transparent');
$textColor = new ImagickPixel('#000');

$gradient = new Imagick();
$gradient->newPseudoImage($width, $height, 'gradient:blue-red');

$image = new Imagick();
$image->newImage($width, $height, $textBackground);

$gradient->setImageColorspace($image->getImageColorspace());

$draw = new ImagickDraw();
$draw->setFillColor($textColor);
$draw->setFontSize( 10 );

$image->annotateImage($draw, 10, 45, 0, $text);

$gradient->compositeImage($image, Imagick::COMPOSITE_MATHEMATICS, 0, 0);
$gradient->setImageFormat('png');

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