[GD] Kuchengrafik erstellen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Fehlermeldung:
    Undefined variable: wert in 73

    Und Zeile 73 ist:
    // beschriftung mit dem prozentwert
    $text = $wert.'%'; //Zeile 73
    *winks*
    Gilbert
    ------------------------------------------------
    Hilfe für eine Vielzahl von Problemen!!!
    http://www.1st-rootserver.de/

    Kommentar


    • #17
      soll bestimmt nur ein beispiel sein.

      mache mal davor $wert=10;, dann hast du einen wert drin stehen...
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #18
        Man sollte auch alles an die Funktion übergeben.

        @wurzel

        Wie kann ich jetzt das IMAGE von der Grundfläche her größer machen, ohnen gleich den Torte größer zu machen?
        *winks*
        Gilbert
        ------------------------------------------------
        Hilfe für eine Vielzahl von Problemen!!!
        http://www.1st-rootserver.de/

        Kommentar


        • #19
          ich bin zwar nicht wurzel, aber ...

          PHP-Code:
          $image imagecreate(300,300); 
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #20
            *grml* wofür hab ich da eigentlich kommentare drin?

            @wotan
            ich hab das script EXTRA nochmal komplett eingestellt. damit war die grundfläche schon grösser und es wurden auch ALLE werte an die fkt übergeben. copy&paste, mehr nicht

            @abraxax, wotan
            hat einer noch ne idee, wie wir elegant an die positionen für die beschriftung kommen? bin gerade etwas unkreativ
            PHP-Code:
            function fill_arc($start$end$color,$wert) {
            global 
            $diameter$centerX$centerY$image$radius$black;
            ...
            // beschriftung mit dem prozentwert
            $text=$wert."%";
            $img_x $centerX cos(deg2rad($end)) * ($radius+10);
            $img_y $centerY sin(deg2rad($end)) * ($radius+10);
            $text "x: ".$img_x." | y: ".$img_y// nur zum testen der coords
            ImageTTFText ($image100,$img_x$img_y$color"arial.ttf"$text);

            alles, was rechts und/oder über der torte steht, steht richtig. alles was links und/oder unter der torte steht, muss verschoben werden.
            ideen, anregungen ?
            Kissolino.com

            Kommentar


            • #21
              @Wurzel
              Das ist ja auch mein Problem immoment, das die Schrift nur Teilweise angezeigt wird.
              Wie du schon gesagt hast.
              Nur würde ich gerne das Bild für sich erstmal größer machen und die Torte dann in der Mitte einsetzen. Nur leider scheiter ich daran, mangels Grafikverständnis und der <=GD1.6.

              Eigentlich würde ich es gerne so haben wie in der Grafik im Anhang. Der Rahmen ist nur zur Verdeutlichung
              Angehängte Dateien
              *winks*
              Gilbert
              ------------------------------------------------
              Hilfe für eine Vielzahl von Problemen!!!
              http://www.1st-rootserver.de/

              Kommentar


              • #22
                Original geschrieben von Wurzel
                @abraxax, wotan
                hat einer noch ne idee, wie wir elegant an die positionen für die beschriftung kommen? bin gerade etwas unkreativ
                da gehts mit genau so ... zumal ist die gd bisher nicht wirklich genutzt hatte ...

                aber da gibts es doch ne fkt, die ermitteln kann, wieviel platz ein text benötigt. oder? hilft das?
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #23
                  Ich verschieb uns mal wieder ins PHP-Dev-Forum
                  *winks*
                  Gilbert
                  ------------------------------------------------
                  Hilfe für eine Vielzahl von Problemen!!!
                  http://www.1st-rootserver.de/

                  Kommentar


                  • #24
                    elende fummelei.
                    so siehts jetzt aus. nicht schön aber selten:
                    PHP-Code:
                    // basis parameter definieren
                    $werte=array("10","15","25","30","20"); // prozentwerte
                    $winkel=array();
                    $start = array();
                    $end=array();

                    // definition der tortenparameter
                    $diameter 100;
                    $radius $diameter/2;
                    $centerX $centerY 100;

                    // bild anlegen mit weissem hintergrund
                    $image imagecreate(300,300);
                    $background imagecolorallocate($image0xFF0xFF0xFF);

                    // winkel für die einzelnen tortenstücke berechnen
                    for($i=0;$i<count($werte);$i++)
                    {
                    $winkel[] = round(360*$werte[$i]/100);
                    }

                    // start/endpositionen für die tortenstücke ermitteln
                    $start[] = 0;
                    for(
                    $i=0;$i<count($winkel);$i++)
                    {
                    $end[] = $start[$i] + $winkel[$i];
                      if(
                    $i< (count($winkel)-1))
                      {
                      
                    $start[] = $end[$i];
                      }
                    }

                    // farben definieren, kann/muss man anders lösen => in abhängigkeit zur
                    // anzahl der werte
                    $light = array();
                    $dark = array();

                    $light[] = imagecolorallocate($image0xC00xC00xC0);
                    $dark[] = imagecolorallocate($image0x900x900x90);
                    $light[] = imagecolorallocate($image0x000x000x80);
                    $dark[] = imagecolorallocate($image0x000x000x50);
                    $light[] = imagecolorallocate($image0xFF0x000x00);
                    $dark[] = imagecolorallocate($image0x900x000x00);
                    $light[] = imagecolorallocate($image0x000x000x80);
                    $dark[] = imagecolorallocate($image0x000x000x50);
                    $light[] = imagecolorallocate($image0xFF0x000x00);
                    $dark[] = imagecolorallocate($image0x900x000x00);


                    // flächen der einzelnen torten-elemente füllen
                    // (inspiriert von den user-notes bei php.net => imagearc())
                    function fill_arc($start$end$color,$wert) {
                    global 
                    $diameter$centerX$centerY$image$radius$background;
                    imagearc($image$centerX$centerY$diameter$diameter$start$end$color);
                    imageline($image$centerX$centerY$centerX cos(deg2rad($start)) * $radius$centerY sin(deg2rad($start)) * $radius $color);
                    imageline($image$centerX$centerY$centerX cos(deg2rad($end)) * $radius $centerY sin(deg2rad($end)) * $radius$color);
                    imagefill ($image,$centerX $radius 0.5 *cos(deg2rad($start+($end-$start)/2)), $centerY $radius 0.5 sin(deg2rad($start+($end-$start)/2)), $color);

                    $text=$wert."%";
                    $img_x $centerX cos(deg2rad(($start $end)/2)) * ($radius-20);
                    $img_y $centerY sin(deg2rad(($start $end)/2)) * ($radius-20);
                    if(
                    $img_x > ($diameter))
                    {
                     
                    $img_x $img_x 7;
                    }
                    if(
                    $img_y > ($diameter))
                    {
                     
                    $img_y $img_y 5;
                    }

                    //$text = "y: ".$img_y;//." | y: ".$img_y;
                    ImageTTFText ($image100,$img_x$img_y$background"arial.ttf"$text);
                    }

                    for(
                    $i=0;$i<count($werte);$i++)
                    {
                     
                    fill_arc($start[$i], $end[$i], $light[$i], $werte[$i]);
                    }


                    // raus mit dem bild an den browser
                    header("Content-type: image/png");
                    imagepng($image); 
                    imagedestroy($image); 
                    Angehängte Dateien
                    Kissolino.com

                    Kommentar


                    • #25
                      Um die Texte genau in der Mitte zu haben müsste sowas gehen:
                      PHP-Code:
                      $text=$wert."%";
                      $img_x $centerX cos(deg2rad(($start $end)/2)) * ($radius-20);
                      $img_y $centerY sin(deg2rad(($start $end)/2)) * ($radius-20);
                      #if($img_x > ($diameter))
                      #{
                      # $img_x = $img_x - 7;
                      #}
                      #if($img_y > ($diameter))
                      #{
                       #$img_y = $img_y + 5;
                      #}


                      /* auch von php.net:
                          Höhe und Breite des Textes berechnen */
                      $dimimagettfbbox(100"ARIAL.TTF"$text);
                      $min_xmin($dim[0], $dim[2], $dim[4], $dim[6]);
                      $max_xmax($dim[0], $dim[2], $dim[4], $dim[6]);
                      $width$max_x-$min_x+1;
                      $min_ymin($dim[1], $dim[3], $dim[5], $dim[7]);
                      $max_ymax($dim[1], $dim[3], $dim[5], $dim[7]);
                      $height$max_y-$min_y+1;

                      /* In der Mitte positionieren */
                      $posX $img_x - ($width/2);
                      $posY $img_y + ($height/2);

                      //$text = "y: ".$img_y;//." | y: ".$img_y;
                      ImageTTFText ($image100,$posX$posY$background"ARIAL.TTF"$text); 

                      Kommentar


                      • #26
                        müsste nicht nur, geht sogar
                        Kissolino.com

                        Kommentar


                        • #27
                          Ich hab mich heute auch mit dieser Problematik rumgeplagt.... und zwar exportiere ich ein Kuchendiagramm als PDF... das Diagramm wird jetzt vernünftig gezeichnet, allerdings auch ohne Beschriftung.
                          Ich hatte halt auch den Gedanken, dass man die Koodinaten des Punktes wo eine Beschriftung ansetzt auch mit Sinus/Kosinus rauskriegt.

                          @crosby Kannst Du mir irgendwie den "mathematischen Hintergrund" kurz dazu erklären, wie Du das machst in Deinem Script?! Ich werd daraus nicht so ganz schlau...

                          Oder irgendjemand anders? Wäre super nett..

                          Kommentar


                          • #28
                            Ich nochmal...

                            hab da eine Funktion gefunden, die vielleicht brauchbar für o.g. Problem für mich sein könnte:

                            http://de3.php.net/manual/de/function.pdf-get-value.php

                            ...also wenn ich ein "Kuchenstück" auf meinem PDF gezeichnet habe, würde ich gerne die aktuelle Position des "Zeichenstiftes" mit einer Funktion zurückgegeben bekommen. Das wäre hilfreich für mich, damit ich eine Beschriftung an der passenden Position kriege.

                            Aber kann mir jemand diese pdf_get_value() erklären?! Wenn ich z.B.
                            PHP-Code:
                            function posX() {
                              return 
                            pdf_get_value($this->pdf_handle'currentx');

                            klappt es nicht.

                            Please help me!!

                            Kommentar

                            Lädt...
                            X