Tämä PHP-skripti luo melko näyttävän ympyrädiagrammin halutuista tiedoista, jotka määritetään muuttujiin skriptin alussa. Jotta skripti toimisi, on serverillä oltava GD-library, jonka versio on oltava vähintään 2.0.
Skripti toiminnassaan: https://www.ohjelmointiputka.net/testit/piirakka.php
<?php //kuvaajan tiedot $otsikko="Ilman koostumus"; $arvo[0][0]=78; $arvo[0][1]="typpi"; $arvo[1][0]=20; $arvo[1][1]="happi"; $arvo[2][0]=0.9; $arvo[2][1]="argon"; $arvo[3][0]=0.1; $arvo[3][1]="muut"; $yksikko="%"; //kuvan alustaminen $leveys=400;$korkeus=230; header ("Content-type: image/png"); $im = @ImageCreate ($leveys, $korkeus) or die ("GD-kirjaston käyttäminen ei onnistu!"); $valkoinen = ImageColorAllocate ($im, 255, 255, 255); $musta=ImageColorAllocate ($im, 0, 0, 0); //arvojen yhteismäärä ja värien määritys for ($i=0;$i<count($arvo);$i++) { $yht=$yht+$arvo[$i][0]; $arvo[$i][2]=ImageColorAllocate ($im, $i*60,($i+1)*60,($i+2)*60); } //kehykset ImageRectangle($im,1,1,$leveys-1,$korkeus-1,$musta); ImageRectangle($im,$leveys-150,40,$leveys-10, 40+count($arvo)*(ImageFontHeight(2)+4),$musta); //otsikko $opituus=ImageFontWidth(5)*strlen($otsikko); $okohta=$leveys/2-$opituus/2; ImageString($im,5,$okohta,5,$otsikko,$musta); //kuvion piirtäminen $vkulma=0; for ($i=0;$i<count($arvo);$i++) { ImageFilledRectangle($im,$leveys-145,43+$i*(ImageFontHeight(2)+4), $leveys-138,50+$i*(ImageFontHeight(2)+4),$arvo[$i][2]); ImageString($im,2,$leveys-135,40+$i*(ImageFontHeight(2)+4), $arvo[$i][1]." (".$arvo[$i][0].$yksikko.")",$musta); $kulma=($arvo[$i][0]/$yht)*360; ImageFilledArc($im,120,120,180,180,$vkulma, $vkulma+$kulma,$arvo[$i][2],IMG_ARC_PIE); $vkulma=$kulma+$vkulma; } ImageArc($im,120,120,180,180,0,360,$musta); //kuva PNG-muotoon ImagePNG ($im); ?>
Johan pomppas
Hienoo työtä!
aaargh, miten joku voi osata tällaista?
Helposti tollasen tekee mutta vaikeeta se on
Siis mitä v*ttua mä selitin...
Olen hiljaa.
hienoa työtä, antti!
"Helposti tollasen tekee mutta vaikeeta se on"
Hyvä huomautus, Veltto :)
Taisi veltto tarkoittaa(?) että se on tehdä helppoa, mutta pitää tehdä paljon työtä...?
Mä en tiiä ees ite että mitä mä tarkotin
Tohon loppuun on vielä hyvä laittaa imagedestroy($im); funktio.
*byääh* mbnetissä ei ole tuota GD-library:ä =(
ei niin, eikä MySql:llää, eikä php:tä, eikä asp:tä, eikä cgi:tä...
Kaikki olis kovia sanoja
Wow, Tää on hieno!
T.M. Mulla ainakin toimii mbnetissä GD...
ja php kyl on!
Olen yrittanyt saada printattua noitten lohkojen nimen sen lohkon keskikohtaan mutta en saa millaan onnistumaan.
Pistan tahan surkean yrityksen. Olisi loistavaa jos joku osaisi auttaa. Tuo koodi siis on tuossa for:issa
Niin ja nykyinen kokeilu on osoitteessa http://koti.mbnet.fi/jideko/jenkki/piirakka.php
$pkulma=90-$kulma/2; if ($pkulma<0){$pkulma=$pkulma=360;} $x_piste=55+ (25*-cos(deg2rad($pkulma))); $y_piste=55+ (25*-sin(deg2rad($pkulma))); $numeron_leveys=ImageFontWidth(5)*strlen($arvo[$i][1]); $numeron_korkeus=ImageFontHeight(5); $numeron_x =$numeron_leveys/2; $numeron_y =$numeron_korkeus/2; $kohta_x=$x_piste-$numeron_x; $kohta_y=$y_piste-$numeron_y; ImageString($im,5,$kohta_x,$kohta_y,$arvo[$i][1],$musta);
ja anteeksi sekava tekstini. Olen vasynyt, koittakaa ymmartaa.
Eikös se ole oikealta nimeltään sektoridiagrammi? ;)
Aika makea.
Tein (muokkasin) vähä erilaisen version.
Tiedot annetaan query_stringiin eli esim. piirakka.php?Otsikko|Yksikkö|10/Testi|10/Testi 2
Mitä mieltä olette tästä?
<?php $teksti = $_SERVER['QUERY_STRING']; // Korvataan oikeiksi merkeiksi $mista = array('%E4', '%C4', '%F6', '%D6', '%E5', '%C5', '%20'); $mihin = array('ä', 'Ä', 'ö', 'Ö', 'å', 'Å', ' '); $teksti = str_replace($mista, $mihin, $teksti); // Tallennetaan luetteloon $arvo = explode('|', $teksti); $otsikko = $arvo[0]; $lukum = count($arvo); for($i=2;$i<$lukum;$i++){ $pala = explode('/', $arvo[$i]); $arvo[$i] = array(); $arvo[$i][0] = $pala[0]; $arvo[$i][1] = $pala[1]; } $yksikko = $arvo[1]; // Kuvan alustaminen $leveys = 400; $korkeus = 230; header("Content-type: image/png"); $err = "Palvelin ei tue GD-kirjastoa."; $im = @imagecreate($leveys, $korkeus) or die($err); $valkoinen = imagecolorallocate($im, 255, 255, 255); $musta = imagecolorallocate($im, 0, 0, 0); // Arvojen yhteismäärä ja värien määritys for ($i=2;$i<$lukum;$i++){ $yht = $yht + $arvo[$i][0]; $arvo[$i][2] = imagecolorallocate($im, $i*60,($i+1)*60,($i+2)*60); } // Kehykset $lukuk = $lukum - 2; imagerectangle($im, 1, 1, $leveys-1, $korkeus-1, $musta); imagerectangle($im, $leveys-150, 40, $leveys-10, 40+$lukuk*(imagefontheight(2)+4), $musta); // Otsikko $opituus = imagefontwidth(5)*strlen($otsikko); $okohta = $leveys/2-$opituus/2; imagestring($im, 5, $okohta, 5, $otsikko, $musta); // Kuvion piirtäminen $vkulma=0; for($i=2;$i<$lukum;$i++){ $ja = $i - 2; imagefilledrectangle($im, $leveys-145, 43+$ja*(imagefontheight(2)+4), $leveys-138, 50+$ja*(imagefontheight(2)+4), $arvo[$i][2]); imagestring($im, 2, $leveys-135, 40+$ja*(ImageFontHeight(2)+4), $arvo[$i][1]." (".$arvo[$i][0].$yksikko.")", $musta); $kulma = ($arvo[$i][0]/$yht)*360; imagefilledarc($im, 120, 120, 180, 180, $vkulma, $vkulma+$kulma, $arvo[$i][2], IMG_ARC_PIE); $vkulma = $kulma + $vkulma; } imagearc($im, 120, 120, 180, 180, 0, 360, $musta); // Kuva PNG-muotoon imagepng($im); imagedestroy($im); ?>
(yritin myös selkeyttää koodia)
Koitin tuota Ollin versiota soveltaa omaan webbisivuviritelmääni, mutta diagrammi menee sekaisin jos arvona on nolla. Osaako joku viisaampi neuvoa miten tuota voisi muokata siten, että nolla-arvoa ei oteta huomioon kuvaajaa piirrettäessä?
Aihe on jo aika vanha, joten et voi enää vastata siihen.