Im Kreis schreiben

Alice

Erfahrenes Mitglied
Hallo. :)

Ich wollte gerne einen Text im Kreis schreiben. Leider funktioniert es bei mir nicht so richtig.

Hier mein Ansatz:
PHP:
<?php
$Text = "DEUTSCHLAND";
$Image = ImageCreateFromPNG("Kreis.png");
$Black = imagecolorallocate($Image,0,0,0);
$Degrees = (180/strlen($Text));

for ($i=0;$i<strlen($Text);$i++) {
$a = ($Degrees*$i)+95;
$cos = cos(deg2rad($a));
$sin = sin(deg2rad($a));
$x = 0;
$y = 180;
$xt = round($cos*($x) - $sin*($y));
$yt = round($sin*($x) + $cos*($y));

imagettftext($Image,20,180-($a),200+$xt,200+$yt,$Black,"Arial.ttf",$Text[$i]);

}

header("Content-type: image/png");
imagepng($Image);
imagedestroy($Image);
?>

Die Grafik:
Kreis.png

Der Text soll auf der oberen Hälfte des Kreises angezeigt werden. Denn ich möchte später auch einen Text auf die untere Hälfte anzeigen lassen.

Der Ansatz ist schon einmal "mehr oder weniger" richtig. Jedoch kriege ich es mit der Einstellung nicht wirklich hin.

Kann mir jemand dabei helfen?
 
was kriegst du mit der Einstellung nicht hin?
Überlappen sich die Buchstaben? Kommt eine Fehlermeldung? Oder wie oder was?
 
Der Code funktioniert soweit.

Jedoch ist der Text "DEUTSCHLAND" immer an der falschen Position. Egal was ich mache.

Ich weiss nicht ob es möglich ist aber ich hätte den Text gerne in der Mitte auf der oberen Hälfte.

Hier ein Super Beispiel:
sealto.gif
 
Das sind doch die Zahlen die ich mehrfach geändert habe. Jedoch kriege ich es nicht "eingestellt".
 
Ich denke mit GDLid wird das kaum vernüftig zu machen sein.

Kennt vielleicht jemand eine andere Sprache womit ich das umsetzen könnte?

- Man muss im Kreis (Halbkreis) schreiben können
- Die Sprache muss mit PHP funktionieren
- Der Text im Haklbkreis muss Zentriert sein
 
Komisch als ich vorhin gesucht habe, da ging er noch. Jetzt ist es scheinbar nicht mehr erreichbar. Wenn du bei gg als Suchbegriffe "php im kreis schreiben" eingibst, ist es gleich der erste Treffer.

Habe aber vorhin den Code zum Glück kopiert:

PHP:
<?php
 /*****
 *  - Example -
 *  Legende zu den benutzen Konstanten:
 *
 *  TP = relativer Pfad zu einer Bilddatei
 *  CL_PHP = absoluter Pfad zu einer PHP-Klasse oder extra Modul
 *  CL_TTF = absoluter Pfad zu einer TTF-Datei
 *  CL_FPDF = absoluter Pfad zu einer FPDF-Klasse oder extra Modul
 *  CL_IMG = absoluter Pfad zu einer Bilddatei
 *  CL_AUDIO = absoluter Pfad zu einer Audiodatei
 *
 *  Die hier benutzten Konstanten beziehen sich nur auf diese Beispiele.
 *  ! Der Pfad muss natürlich auf deine Gegebenheiten angepasst werden !
*/

error_reporting(E_ALL);

$pic = 'das_bild.jpg';

// Text könnte auch etwas anders sein
   $text = array();

  $string = 'irgendein beliebiger Text';

  $string = preg_replace('~(\t|\r|\n)~', '', $string);
  $pattern = '~(.+)~U';
  preg_match_all($pattern, $string, $text);

// absoluten Pfad zur TTF setzen (einige Server wollen das so) ...
   $TTF = 'ARIAL.TTF';
   $FONT = "C:\\WINDOWS\\Fonts\\" .$TTF;
// Breite und Höhe festlegen
   $BB = 640;
   $HH = 480;

// den Radius lassen wir dynamisch erstellen
   $radius = 300;

// neues Bild erzeugen
   $im = ImageCreateTrueColor($BB,$HH);

// Farben definieren
   $WEISS = ImageColorAllocate($im, 255, 255, 255);
   $GR1 = ImageColorAllocate($im, 100, 100, 100);

// Hintergrund füllen
   ImageFill ($im, 0, 0, $WEISS);

// Startwerte setzen
   $buffer = 90;
   $mitte_x = $BB/2;
   $mitte_y = $HH/2;

// brauchen noch einige Gradzahlen :-)
   $wert_grad = ( 360 / count($text[0]) );

   $anz = (count($text)/2);


$st_y = 0;
$st_x = 0;
$cc = 0;
$fontsize = 12;

// Array auslsen und darstellen
   foreach( $text[0] as $temp) {
   $cc++;

    $st_x = cos( ( $buffer * M_PI ) / 180 );
    $st_ziel_x = $mitte_x + ( -$st_x * $radius / 2 );

    $st_y = sin( ( $buffer * M_PI ) / 180 );
    $st_ziel_y = $mitte_y + ( -$st_y * $radius / 2 );

    $TS = imagettfbbox($fontsize, 0, $FONT, $temp);
    $n = ($TS[2] - $TS[0])/2;

    ImageTTFText($im, $fontsize, 90-$buffer, $st_ziel_x, $st_ziel_y, $GR1, $FONT, $temp);

    $buffer += $wert_grad;

   }

// noch bissel Beschriftung
   imagestring($im, 2, 30, 30, 'Anzhal Zeichen: '.count($text[0]), $GR1);
   imagestring($im, 2, 30, 40, 'Erstellt am: '.date('d.m.Y'), $GR1);
   imagestring($im, 2, 30, 50, 'Erstellt um: '.date('H:i:s'), $GR1);

// Bild ausgeben und aus Speicher freigeben
   ImagePNG($im, $pic);
   ImageDestroy($im);

// im Browser anzeigen
echo '<img src="'.$pic.'" border="1">';
?>

Jetzt ist es 20:04 Uhr, der obige Link tut wieder!? Was auch immer vorhin war.
 
Zuletzt bearbeitet:
Zurück