2016-10-08 20 views
0

Ich mag würde auf einem Bild in vertikalem Text in PHP setzen:php gd vertikaler Text ein Bild

function scrivi($scrivi, $p) { 
    $imgResource = imagecreatefromjpeg($p); 
    $textcolor = imagecolorallocate($imgResource, 255, 255, 255); 
    $fontPath = "st.ttf"; 
    $fontSize = "18"; 
    $rotation = "270"; // counter-clockwise rotation 
    $text = "this is a text"; 
    $textCoords = imagettfbbox($fontSize, $rotation, $fontPath, $text); 
    $x = 36; 
    $y = 36; 
    imagettftext($imgResource, $fontSize, $rotation, $x, $y, $textcolor, $fontPath, $text); 
    unlink($p); 
    imagejpeg($imgResource, $p, 100); 
    imagedestroy($imgResource); 
} 

Es funktioniert gut, nur, dass ich mag, dass die Buchstaben eingeschaltet sind dies ein Beispiel ist die Funktion mit

enter image description here

Stattdessen würde ich

enter image description here mögen

012.351.

könnte eine Idee sein, jeden Brief zu wickeln

Antwort

0

Alle müssen Sie wirklich den Text in ein Array aufgeteilt zu tun, es Schleife, versetzt dann die y durch die Höhe + des Schriftzeichen führenden:

function scrivi($p,$text) 
    { 
     $imgResource = imagecreatefromjpeg($p); 
     $textcolor  = imagecolorallocate($imgResource, 255,255, 255); 
     $fontPath  = __DIR__."/st.ttf"; 
     $fontSize  = "18"; 
     $x = 36 ; 
     $y = 36; 
     foreach(str_split($text) as $char) { 
      $textCoords = imagettfbbox($fontSize, 0, $fontPath, $char); 
      imagettftext($imgResource, $fontSize, 0, $x, $y, $textcolor,$fontPath,$char); 
      $y += 24; 
     } 
     unlink($p); 
     imagejpeg($imgResource,$p,100); 
     imagedestroy($imgResource); 
    } 

scrivi('http://imgtops.sourceforge.net/bakeoff/bw.jpg',"Cats are great"); 

Gibt Ihnen:

enter image description here

(Bildquelle: http://imgtops.sourceforge.net/bakeoff/)

+0

sind zu einer Lösung ähnlich wie deins angekommen, aber jetzt habe ich ein Problem, Sie könnten die Buchstaben zentrieren, wie ich zum Beispiel nicht in der Mitte ist http://imgur.com/a/YVVTR – effeee

+0

Yeah geben Sie mir eine Sekunde um das herauszufinden. Ich muss nur das Skript testen. – Rasclatt

+0

Ich muss bald raus, aber um das zu tun, musst du die Breite des größten Charakters erreichen (mache eine Schleife vor der aktuellen). Dann müssen Sie das aktuelle Zeichen in der Stapelschleife messen und der Unterschied zwischen dem größten Zeichen und dem aktuellen Zeichen geteilt durch 2 ist der Wert, den Sie nach links einrücken. Das sollte die Charaktere zentrieren. – Rasclatt