Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Piirakka

Sivun loppuun

odys [20.08.2003 20:23:55]

#

Piirtää taulukosta piirakkadiagrammin.

Ihan hyvät vakiovärit. Demo: http://koti.mbnet.fi/jonij/pieexample.php

Säätömahdollisuuksia niukasti ellet sitten muuttele funktion koodia.

Alku kommentoitu englanniksi kun en jaksanut alkaa enempää kääntämään. Joskus kommentoinut sen englanniksi.

Vieraile myös: http://odys.hellfish.org/ Sivuilla on jo jonkin verran sisältöä.

<?php

    /*
     *  Function is coded by Joni Järvinen a.k.a odys
     *  More scripts can be found at http://odys.hellfish.org/ (Finnish site)
     *
     *  Function CreatePie (Array data, String topic, String unit [, Bool print])
     *
     *  Data array must be in the following form:
     *
     *    Array (
     *      [0] => Array (
     *        String Sub_topic, Float Amount [, Int red, Int green, Int blue]
     *      ),
     *      [1] => Array (
     *        String Sub_topic2, Float Amount [, Int red, Int green, Int blue]
     *      )
     *    );
     *
     *  Topic parameter is the main topic of the pie
     *
     *  Unit parameter is for example " %" or " Kg"
     *
     *  Last parameter indicates wether pie is printed or returned as a resource
     *  variable. At default it is FALSE. If this parameter is set to TRUE the
     *  pie will be printed immideately.
     *
     *  Comments during the function is in Finnish (Sorry about that for those
     *  who can't understand Finnish) but this script was originally made for
     *  a Finnish programming site.
     *
     */

    function CreatePie($data, $topic, $unit, $print = FALSE) {
        // Tarkistetaan, että tarvittava data on annettu
        if (Is_Array($data) AND SizeOf($data) >= 1 AND $topic AND $unit) {
            // Luodaan kuva
            $image = ImageCreate(500, 300) or die("Asenna GD kirjasto!");

            // Asetetaan taustaksi valkoinen
            $white = ImageColorAllocate ($image, 255, 255, 255);

            // Määritetään musta väri
            $black = ImageColorAllocate ($image, 0, 0, 0);

            // Määritetään harmaa väri
            $gray = ImageColorAllocate ($image, 221, 221, 221);

            // Piirretään kuvalle kehykset
            ImageRectangle ($image, 1, 1, ImageSX($image) - 1, ImageSY($image) - 1, $black);

            // Alustetaan random luku generaattori
            Mt_Srand (358);

            // Loopataan data läpi
            while (list($key, $val) = each($data)) {
                // Tarkastetaan onko $val array
                if (Is_Array($val)) {
                    // Lasketaan kaikki arvot yhteen kulman laskemista varten
                    $values += $val[1];
                    // Tarkastetaan onko käyttäjä määritellyt itse värin
                    if (($val[2] >= 0 AND $val[2] <= 255 AND $val[2] != "") AND
                        ($val[3] >= 0 AND $val[3] <= 255 AND $val[3] != "") AND
                        ($val[4] >= 0 AND $val[4] <= 255 AND $val[4] != "")) {

                        // Jos on määritellään uusi väri
                        $data[$key][5] = ImageColorAllocate ($image, $val[2], $val[3], $val[4]);
                    } else {
                        // Jos ei niin määritellään random väri
                        $data[$key][5] = ImageColorAllocate ($image, Mt_Rand(0, 255),
                                                             Mt_Rand(0, 255),
                                                             Mt_Rand(0, 255));

                    }

                } else {
                    // Jos $val ei ole array niin tulee virheilmoitus
                    die ("Data taulukon arvon tyyppi ei kelpaa!");
                }
            }

            // Piirretään otsikko
            ImageString ($image, 5, floor((ImageSX($image) / 2) - ((ImageFontWidth(5) * strlen($topic)) / 2)),
                         10, $topic, $black);

            // Piirretään boksi minne selitykset tulevat
            ImageRectangle ($image, ImageSX($image) - 230, 60, ImageSX($image) - 20,
                            60 + (sizeof($data) * ImageFontHeight(2)) + 16, $black);

            // Täytetään boksi harmaalla
            ImageFilledRectangle ($image, ImageSX($image) - 229, 61, ImageSX($image) - 21,
                                  60 + (sizeof($data) * ImageFontHeight(2)) + 15, $gray);

            // Loopataan data läpi ja piirretään ympyrän osat ja selitykset väreille
            for ($i = 0; $i < sizeof($data); $i++) {
                // Lasketaan loppu kulma
                $end_angle = $data[$i][1] / $values * 360;

                // Piirretään slaissi lisää tietoja funktiosta: https://www.php.net/ImageFilledArc
                ImageFilledArc ($image, 125, 155, 200, 200, $start_angle,
                                $start_angle + $end_angle, $data[$i][5], IMG_ARC_PIE);

                // Lisätään aloitus kulmaan lopetus kulma
                $start_angle += $end_angle;

                // Piirretään neliö, ja sen viereen selitys, mitä se väri tarkoittaa
                ImageRectangle ($image, ImageSX($image) - 221,
                                ImageFontHeight(2) * $i + 5 + 66, ImageSX($image) - 214,
                                ImageFontHeight(2) * $i + 10 + 68, $black);

                ImageFilledRectangle ($image, ImageSX($image) - 220,
                                      ImageFontHeight(2) * $i + 5 + 67, ImageSX($image) - 215,
                                      ImageFontHeight(2) * $i + 10 + 67, $data[$i][5]);

                ImageString ($image, 2, ImageSX($image) - 210,
                             ImageFontHeight(2) * $i + 5 + 63,
                             $data[$i][0] . " (" . $data[$i][1] . $unit . ")", $black);
            }

            // Piirretään ääriviivat ympyrälle
            ImageArc ($image, 125, 155, 200, 200, 0, 360, $black);

            // Piirretään yhteensä teksti
            ImageString ($image, 2,
                         Floor((ImageSX($image) / 2) - ((ImageFontWidth(2) * strlen("Yhteensä: " . $values . $unit)) / 2)),
                         ImageSY($image) - 25, "Total: " . $values . $unit, $black);

            // Tarkastetaan haluaako käyttäjä tulostaa kuvan suoraan
            if (!$print) {
                // Jos ei, pelautetaan kuva vain resource muuttujana
                return $image;
            }

            // Jos haluaa niin lähetetään headerit
            Header ("Content-type: image/png");

            // Tulostetaan kuva
            ImagePng ($image);
            // Ja vapautetaan muistia tuhoamalla kuva
            ImageDestroy ($image);

        } else {
            die ("Ei tarpeeksi parametrejä");
        }
    }

?>

Example:

<?php

    $data = Array ( // Colors are now made randomly.
        Array ("Assembly", 11),
        Array ("C", 44),
        Array ("C++", 37),
        Array ("Delphi", 51),
        Array ("Java", 16),
        Array ("Perl", 17),
        Array ("PHP", 152),
        Array ("Visual Basic", 17),
        Array ("Muut", 35)
    );
    CreatePie ($data, "Distribution of codelibrary", " scritpts", TRUE);

?>

Example 2:

<?php

    $data = Array ( // Now RGB values are added to data array
        Array ("Assembly", 11, 190, 200, 250),
        Array ("C", 44, 190, 250, 200),
        Array ("C++", 37, 70, 110, 70),
        Array ("Delphi", 51, 240, 170, 240),
        Array ("Java", 16, 100, 50, 100),
        Array ("Perl", 17, 240, 250, 180),
        Array ("PHP", 152, 90, 100, 150),
        Array ("Visual Basic", 17, 250, 170, 170),
        Array ("Muut", 35, 120, 120, 120)
    );
    CreatePie ($data, "Distribution of codelibrary", " scritpts", TRUE);

?>

T.M. [21.08.2003 00:33:58]

#

jeees, ihan hyvältä näyttää, mutta älä ikinä kirjoita kahdella kielellä ohjeita tai selostuksia!

odys [21.08.2003 08:28:50]

#

Lue kuvaus niin tajuat miksi on kahella kielellä.

odys [21.08.2003 14:37:43]

#

Onhan noi enkun kieliset kommentit parempi ku ei mitään, vai haluatko että saat itse ottaa selvää koodia tutkimalla miten funktiota käytetään?

T.M. [23.08.2003 13:16:20]

#

Tossa on "example" jutussa pari enkun kielistä selitystä, ja muutenkin on tyhmää kirjottaa enkuks mitä tahansa kommentteja (esim toi alku tosta koodista) jos kerta pistää suomenkielisille sivuille koodivinkkejä.

odys [23.08.2003 17:11:12]

#

T.M. ei sun tarvii valittaa noista enkun kielisistä kommenteista kun ne on alunperin tehtykkin enkun kielisille sivuille.. ekat omat sivut oli nimittäin enkuksi ja sittemin olen vaihtanut kielen suomeen, jotta teksti ei olisi niin tökerön kuulosta.

T.M. [01.09.2003 17:35:11]

#

en mä valita, kommentoin vain koodin tapaa esitellä itseään.

Meitsi [16.10.2004 15:04:37]

#

Mut mut täähän on aivan samanlainen kuin Antin vinkki... :S

Olli [01.02.2007 19:39:10]

#

Mul sanoo et kuvaa ei voi näyttää! Ehk oon tehny jotai väärin :P


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta