2017-02-24 223 views
0

我有一些基本的代碼工作生成具有堅實背景的圖像。但是我想知道如何做出漸變。這是我的代碼: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

回答

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; 
+0

非常感謝你的代碼 - 我說的這是它應該看起來如此完整,我覺得我犯了一個錯誤,因爲它不起作用的代碼放入你的代碼。 https://gist.github.com/anonymous/b5cb6fed5d3bdc017b2e3888a212bcd8 – Jimmy

+1

我已經運行這部分代碼,並沒有按預期工作。原因是缺少'$ gradient-> setImageColorspace($ image-> getImageColorspace());'(僞圖像應該設置了顏色空間)。我已經更新了答案。 –