2017-02-23 9 views
0

Ich benutze imagemagick, um ein Bild mit Text zu versehen, aber ich habe Probleme damit, den Text dynamisch in die Mitte der Box zu stellen.Imagemagick Text auf Mitte setzen

Für Bonuspunkte, gibt es auch einen Weg, um es dann mit einem zweiten Befehl zu versetzen, d. H. Es 50px rechts von der Mitte zu schieben. Das liegt daran, dass ich normalerweise möchte, dass der Text in der Mitte liegt, es sei denn, sie fügen ein Bild hinzu, dann muss ich auch Platz für das Bild schaffen.

Der Text und die Schriftgröße sind variabel, müssen jedoch zentriert werden.

Das ist mein aktueller Code ist:

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

ich versuchte, indem Sie diesen Befehl, aber es schien keine Wirkung zu haben:

$draw->setTextAlignment(\Imagick::ALIGN_CENTER); 

Die nächste Antwort, die ich this one finden könnte, ist, aber es scheint ein bisschen langatmig zu sein, die Größe zu berechnen und sie dann so zu zentrieren.

+0

Was SetGravity (Imagick :: GRAVITY_CENTER) – Bonzo

+0

@Bonzo Hallo. Ich habe das versucht, aber es schien nicht zu funktionieren :( – Jimmy

Antwort

1

Dies funktioniert gut für mich:

#!/usr/local/bin/php -f 
<?php 
    /* 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->setFontSize(30); 
    $draw->setGravity(Imagick::GRAVITY_CENTER); 

    /* Create text */ 
    $image->annotateImage($draw, 0, 0, 0, "Some funky text"); 

    /* Give image a format */ 
    $image->setImageFormat('png'); 
    $image->writeImage('result.png'); 
?> 

enter image description here

+0

Perfekt, vielen Dank – Jimmy