1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

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

Dieses Thema im Forum "PHP" wurde erstellt von Alice, 30. Januar 2012.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Alice

    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: 30. Januar 2012
  2. Yaslaw

    Yaslaw n/a Moderator

    Nun, du bist schon lange im Forum - und solltest darum wissen dass dies der falsche Ort ist.
    -> Verschoben
  3. Alice

    Alice Erfahrenes Mitglied

    Ich hab dieses Unterforum nicht gesehen. Sorry!
  4. master bratack

    master bratack Grünschnabel

    Wieviel würdesten bezahlen
  5. ComFreek

    ComFreek Mod | @comfreek Moderator

    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:
    Code (PHP):
    1.  
    2. <?php
    3.  
    4. function &bl5000Text(&$imgObj, $textProps, $offsetX=0, $offsetY=0, $charSpan=10)
    5. {
    6.   $text = strrev($textProps['text']);
    7.   $textLen = strlen($text);
    8.  
    9.   $charSpanMin = 360/$textLen;
    10.  
    11.   if ( $charSpan > $charSpanMin )
    12.     $charSpan = $charSpanMin;
    13.  
    14.   $start_angle = ceil($charSpan*($textLen/2));
    15.  
    16.   for ( $i=0; $i<$textLen; $i++ )
    17.   {
    18.     $a = ($charSpan*$i)-$start_angle;
    19.  
    20.     $cos = cos(deg2rad($a));
    21.     $sin = sin(deg2rad($a));
    22.     $x = 0;
    23.     $y = 180;
    24.     $xt = round($cos*($x) - $sin*($y));
    25.     $yt = round($sin*($x) + $cos*($y));
    26.     imagettftext($imgObj, $textProps['fontSize'], 360-$a, $offsetX+$xt, $offsetX+$yt, $textProps['color'],
    27.                  $textProps['font'], $text[$i]);
    28.   }
    29.   return $imgObj;
    30. }
    31.  
    32.  
    33. $image = imagecreatefromjpeg('circle.jpg');
    34. $red = imagecolorallocate($image,255,0,0);
    35.  
    36. $image = bl5000Text($image, array('text' => 'Love PHP!', 'color' => $red, 'font' => 'LCD-BOLD.TTF', 'fontSize' => 30),
    37.                     200, 200);
    38.  
    39.  
    40. header("Content-type: image/jpeg");
    41. imagejpeg($image,"",100);
    42. imagedestroy($image);
    43.  
    44. ?>
    45.  
    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
  6. Alice

    Alice Erfahrenes Mitglied

    WOW!

    Vielen vielen vielen Dank! Das probiere ich direkt mal aus!

    Ich möchte auf keinen Fall unhöflich klingen oder so, aber könntest du bitte bitte ein paar Einstellungen so ändern das der Text auf diese Grafik passt?

    http://www.abload.de/img/circlez9uos.png

    Das wäre so super!
  7. Lime

    Lime frisch fruchtig

    Auja, etwas zum spielen!

    PHP:
    1. <?php
    2.  
    3. function &bl5000Text(&$imgObj, $textProps, $offsetX=0, $offsetY=0, $charSpan=13)
    4. {
    5.   $text = strrev($textProps['text']);
    6.   $textLen = strlen($text);
    7.  
    8.   $charSpanMin = 360/$textLen;
    9.  
    10.   if ( $charSpan > $charSpanMin )
    11.     $charSpan = $charSpanMin;
    12.  
    13.   $start_angle = ceil($charSpan*($textLen/2));
    14.  
    15.   for ( $i=0; $i<$textLen; $i++ )
    16.   {
    17.     $a = ($charSpan*$i)-$start_angle;
    18.  
    19.     $cos = cos(deg2rad($a));
    20.     $sin = sin(deg2rad($a));
    21.     $x = 0;
    22.     $y = 240;
    23.     $xt = round($cos*($x) - $sin*($y));
    24.     $yt = round($sin*($x) + $cos*($y));
    25.     imagettftext($imgObj, $textProps['fontSize'], 360-$a, $offsetX+$xt, $offsetX+$yt, $textProps['color'], $textProps['font'], $text[$i]);
    26.   }
    27.   return $imgObj;
    28. }
    29.  
    30.  
    31. $image = imagecreatefromjpeg('circle.jpg');
    32. $red = imagecolorallocate($image,255,0,0);
    33.  
    34. $image = bl5000Text($image, array('text' => 'Love PHP!', 'color' => $red, 'font' => './LCD-BOLD.TTF', 'fontSize' => 40),
    35.                     260, 200);
    36.  
    37.  
    38. header("Content-type: image/jpeg");
    39. imagejpeg($image,"",100);
    40. imagedestroy($image);
    41.  
    42. ?>
    Bei mir siehts relativ gut aus:
    circle123.PNG
  8. Alice

    Alice Erfahrenes Mitglied

    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: 31. Januar 2012
  9. Alice

    Alice Erfahrenes Mitglied

    Hallo. :)

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

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

    Yaslaw n/a Moderator

    Argumente abzählen und Text vergleichen:
  11. Alice

    Alice Erfahrenes Mitglied

    Auf welche Frage hast du jetzt geantwortet?
  12. einfach nur crack

    einfach nur crack mag Cookies & Kekse

    Logischerweise die Antwort auf die Frage, was die 200 am Ende des Codes bewirkt.
  13. ComFreek

    ComFreek Mod | @comfreek Moderator

    So, habe noch eine zwei Einstellmöglichkeiten hinzugefügt, die Parameterliste verkürzt und einen Bug beseitigt (hatte auch für den Y-Wert $offsetX im Code genommen).

    Code ist jetzt in einem Blogeintrag hier verfügbar: http://www.tutorials.de/blogs/comfreek/11295-php-text-innerhalb-entlang-eines-kreises-schreiben.html

    Wegen dem "I":

    In der Tat erscheint beim "I" immer ein größerer Abstand zu anderen Buchstaben - und das bei mehreren verschiedenen Schriftarten.

    Vielleicht weiß hier jemand den Hintergrund?
  14. Alice

    Alice Erfahrenes Mitglied

    OK das dachte ich mir natürlich schon aber egal welche Zahl ich dort einbaue (von 0 bis 1000) sehe ich keine veränderung.

    Jemand ne Idee wie ich das Problem mit dem Buchstaben "I" lösen kann? Denn dann wäre der Sourcecode PERFEKT.

    Ich habe schon anderen Schriftarten ausprobiert aber immer das selbe Problem. Der abstand nach Rechts nach einem "I" ist 3 mal so hoch wie der normale Abstand.
  15. ComFreek

    ComFreek Mod | @comfreek Moderator

    Immer noch (dort [u]einbaue[/u])?
  16. Alice

    Alice Erfahrenes Mitglied

    Leider wird mit dem neuen Code gar nichts angezeigt. Ich suche gerade den Fehler (der bestimmt bei mir liegt).
  17. Alice

    Alice Erfahrenes Mitglied

    So jetzt geht es!

    Also ehrlich ComFreek... Du hast mir schon oft geholfen aber ich habe mich noch nie über etwas so gefreut wie über diesen Code von dir!

    Vielleicht gibt es hier noch jemanden der das Problem mit dem Buchstabe "I" erklären oder sogar bei der Lösung helfen kann. :)

    Wäre es schwierig den Code etwas umzubauen damit auch ein oberer Bogen erzeugt wird?
  18. Lime

    Lime frisch fruchtig

    Wenn man weiß wie, dann bestimmt nicht.
    Du könntest einfach etwas mit dem Code spielen, dann wirst du sehen, wie einfach es geht. ;)
  19. Alice

    Alice Erfahrenes Mitglied

    Niemals! Sobald ich am Code etwas anpasse ausser der Schrift geht nichts mehr! :D

    Ich blicke beim "Text im Kreis" einfach nicht durch.
  20. Lime

    Lime frisch fruchtig

    Du solltest entweder Vorzeichen (Minus) oder die Gradzahlen ändern (bei den Winkelfunktionen), dann funktioniert das... ^^
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen