(Suche Coder für Skript) -> Kreis mit Text

Status
Nicht offen für weitere Antworten.

Alice

Erfahrenes Mitglied
Hallo, ich hoffe ich bin im richtigen Forum mit meiner Anfrage. Wenn nicht, bitte einfach verschieben.

Und zwar suche ich einen Coder der mir mit PHP (oder so) ein Skript bastelt der einen Text in einen Kreis schreibt.
Der Kreis ist immer die selbe Grafik (z.B. 300x300px) die ins Skript geladen werden soll. Also eine Art Wappen. Es muss nur noch der Text immer unten mittig (richtig herum beim lesen) angebraucht werden. Anschliessend muss die neue Grafik auf dem Server gespeichert werden.

Ich bin gerne bereit dafür zu behahlen, denn selber kriege ich es einfach nicht hin.

Der Text wie z.B. "Fußball" oder "Ball" muss immer mittig (unten) sein. Umso länger der Text wird, umso mehr soll es halt nach oben wanders. Halt wie bei einem Wappen.

Gutes Beispiel: http://www.kirchendemenreuth.de/wappen_rund1.gif

Edit:

Es ist mir egal welche Programmiersprache oder so verwendet wird. Hauptsache der User ist nicht gewungen irgend ein PlugIn zu installieren oder so. Des Weiteren soll der User die verarbeitung der Grafik nicht sehen. Erst wenn das Bild als neues Bild (Standard Grafik + Text = Neue Grafik) auf dem Server gespeichert wurde, soll es der User sehen.
 
Zuletzt bearbeitet:
Nun, du bist schon lange im Forum - und solltest darum wissen dass dies der falsche Ort ist.
-> Verschoben
 
Gerade innerhalb von ~10 Minuten erledigt ;)

Ergebnis
1.) circle_small.jpg

2.) "Love PHP!" (LCD-BOLD.TTF - frei von dafont.com bzw. Samuel Reynolds)

3.) result_small.jpg



Code

Originale Quelle für den Code war: http://www.ithowto.ro/2009/03/howto-write-circular-text-with-php-and-gd/

Für dich abgeändert:
PHP:
<?php

function &bl5000Text(&$imgObj, $textProps, $offsetX=0, $offsetY=0, $charSpan=10)
{
  $text = strrev($textProps['text']);
  $textLen = strlen($text);

  $charSpanMin = 360/$textLen;
  
  if ( $charSpan > $charSpanMin )
    $charSpan = $charSpanMin;

  $start_angle = ceil($charSpan*($textLen/2));
  
  for ( $i=0; $i<$textLen; $i++ )
  {
    $a = ($charSpan*$i)-$start_angle;

    $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($imgObj, $textProps['fontSize'], 360-$a, $offsetX+$xt, $offsetX+$yt, $textProps['color'],
                 $textProps['font'], $text[$i]);
  }
  return $imgObj;
}


$image = imagecreatefromjpeg('circle.jpg');
$red = imagecolorallocate($image,255,0,0);

$image = bl5000Text($image, array('text' => 'Love PHP!', 'color' => $red, 'font' => 'LCD-BOLD.TTF', 'fontSize' => 30),
                    200, 200);


header("Content-type: image/jpeg");
imagejpeg($image,"",100);
imagedestroy($image);

?>
Momentan fehlt die Dokumentation der Funktion - vllt. füge ich sie im Code noch hinzu.

Ansonsten:
  • $imgObj Eine Bild-Ressource, erstellt durch z.B. [phpf]imagecreatefromjpeg[/phpf].
  • $textProps Ein assoziatives Array mit folgenden Informationen bezüglich des anzuzeigenden Textes:
    • text Der anzuzeigende Text
    • color Eine durch [phpf]imagecolorallocate[/phpf] erstellte Farben-Ressource
    • font Der Pfad zu der zu nutzenden Schriftart
    • fontSize Die Schriftgröße in pt
  • $offsetX=0 Abstand von links
  • $offsetY=0 Abstand von oben
  • $charSpan=10 Abstand der einzelnen Zeichen in Grad
 
Auja, etwas zum spielen!

PHP:
<?php

function &bl5000Text(&$imgObj, $textProps, $offsetX=0, $offsetY=0, $charSpan=13)
{
  $text = strrev($textProps['text']);
  $textLen = strlen($text);

  $charSpanMin = 360/$textLen;
  
  if ( $charSpan > $charSpanMin )
    $charSpan = $charSpanMin;

  $start_angle = ceil($charSpan*($textLen/2));
  
  for ( $i=0; $i<$textLen; $i++ )
  {
    $a = ($charSpan*$i)-$start_angle;

    $cos = cos(deg2rad($a));
    $sin = sin(deg2rad($a));
    $x = 0;
    $y = 240;
    $xt = round($cos*($x) - $sin*($y));
    $yt = round($sin*($x) + $cos*($y));
    imagettftext($imgObj, $textProps['fontSize'], 360-$a, $offsetX+$xt, $offsetX+$yt, $textProps['color'], $textProps['font'], $text[$i]);
  }
  return $imgObj;
}


$image = imagecreatefromjpeg('circle.jpg');
$red = imagecolorallocate($image,255,0,0);

$image = bl5000Text($image, array('text' => 'Love PHP!', 'color' => $red, 'font' => './LCD-BOLD.TTF', 'fontSize' => 40),
                    260, 200);


header("Content-type: image/jpeg");
imagejpeg($image,"",100);
imagedestroy($image);

?>

Bei mir siehts relativ gut aus:
circle123.PNG
 
Ja sieht bei mir auch gut aus. Nur der Text ist nicht mittig.

Edit:

Wenn ein "I" im Text vorkommt, ist der Abstand etwas sehr hoch. Jemand eine Idee wie man das ändern könnte?
 
Zuletzt bearbeitet:
Hallo. :)

Kann mir jemand sagen was die "200" am ende des Codes bewirkt?

PHP:
$image = bl5000Text($image, array('text' => 'Love PHP!', 'color' => $red, 'font' => './LCD-BOLD.TTF', 'fontSize' => 40),
                    260, 200);
 
Status
Nicht offen für weitere Antworten.
Zurück