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'); 

但我不知道我是怎么然后用文字相结合的梯度。

+0

https://www.osd.net/blog/web-development/php/generate-gradient-image-with-php/ – clearshot66

+0

@ clearshot66我认为这是对GD不imagemagick – Jimmy

请使用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; 
+0

非常感谢你的代码 - 我说的这是它应该看起来如此完整,我觉得我犯了一个错误,因为它不起作用的代码放入你的代码。 https://gist.github.com/anonymous/b5cb6fed5d3bdc017b2e3888a212bcd8 – Jimmy

+1

我已经运行这部分代码,并没有按预期工作。原因是缺少'$ gradient-> setImageColorspace($ image-> getImageColorspace());'(伪图像应该设置了颜色空间)。我已经更新了答案。 –