2017-02-24 7 views
0

Ich habe einige grundlegende Code arbeiten, um ein Bild mit einem festen Hintergrund zu generieren. Allerdings habe ich mich gefragt, wie ich einen Gradienten machen kann. Dies ist mein Code:Imagemagick Hintergrund Farbverlauf

<?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; 
} 

Der nächste Code, den ich ist so etwas wie diese finden könnte:

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

Aber ich weiß nicht, wie ich dann die Steigung mit dem Text kombinieren.

+0

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

+0

@ clearshot66 denke ich, dass für GD nicht imagemagick – Jimmy

Antwort

1

Verwenden Sie bitte compositeImage Funktion. Es kombiniert ein Bild in ein anderes. Erstellen Sie eine Imagick-Instanz mit Farbverlauf, eine zweite mit Text- und Alpha-Kanal-Hintergrund und kombinieren Sie sie zu einer.

Referenz: 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

Vielen Dank für den Code - habe ich Recht damit zu sagen, dass es so aussehen sollte, ich habe das Gefühl, dass ich einen Fehler gemacht habe, den Code einzugeben, weil es nicht funktioniert? https://gist.github.com/anonymous/b5cb6fed5d3bdc017b2e3888a212bcd8 – Jimmy

+1

Ich habe diesen Teil des Codes ausgeführt, und es hat nicht wie erwartet funktioniert. Der Grund war fehlende Zeile '$ gradient-> setImageColorspace ($ image-> getImageColorspace());' (Pseudo-Bild sollte Farbraum gesetzt haben). Ich habe die Antwort aktualisiert. –

Verwandte Themen