Imagemagick背景渐变
我有一些基本的代码工作生成具有坚实背景的图像。但是我想知道如何做出渐变。这是我的代码: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');
但我不知道我是怎么然后用文字相结合的梯度。
请使用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;
非常感谢你的代码 - 我说的这是它应该看起来如此完整,我觉得我犯了一个错误,因为它不起作用的代码放入你的代码。 https://gist.github.com/anonymous/b5cb6fed5d3bdc017b2e3888a212bcd8 – Jimmy
我已经运行这部分代码,并没有按预期工作。原因是缺少'$ gradient-> setImageColorspace($ image-> getImageColorspace());'(伪图像应该设置了颜色空间)。我已经更新了答案。 –
https://www.osd.net/blog/web-development/php/generate-gradient-image-with-php/ – clearshot66
@ clearshot66我认为这是对GD不imagemagick – Jimmy