Wykres kołowy z efektem 3D i legendą. [PHP]
Skrypt wyświetla dwa wykresy kołowe na podstawie danych wcześniej zapisanych do pliku. Pierwsze koło przedstawia systemu operacyjne odwiedzających stronę, a drugi ich przeglądarki www.
Dodatkowo dynamicznie jest tworzona legenda. Wszystkie loga/znaczki (obrazki) zapisałem używając kodowania base64, dzięki czemu nie muszę mieć ich w osobnych plikach tylko wszystko razem - wygodniej przy tak małym projekcje.
Nadmienię, że korzystając z base64 wszystko będzie 33% więcej zajmować, ale za to minimalnie szybciej pracować.
Tyle tłumaczenia ;] Kod postarałem się opisać w miarę logicznie i zrozumiale.
<?php
// Tworzymy obrazek i definiujemy kolor czarny i biały
$image = ImageCreateTrueColor(225, 160);
$black = ImageColorAllocate($image, 0, 0, 0);
$white = ImageColorAllocate($image, 255, 255, 255);
// Zalewamy wszystko na biało i dodajemy 1 pikselową czarną ramkę
ImageFilledRectangle($image, 0, 0, 225, 160, $white);
ImageRectangle($image, 0, 0, 224, 159, $black);
// "moc" cienia a raczej ile będziemy odejmować od jasnych kolorów by uzyskać ciemniejsze
$cien = 40;
// Tworzymy całą paletę kolorów dla każdego systemu i przeglądarki oraz ich cienie
$color_linux = ImageColorAllocate($image, 236, 171, 83);
$color_mac = ImageColorAllocate($image, 138, 43, 226);
$color_windows = ImageColorAllocate($image, 102, 205, 170);
$color_linux_cien = ImageColorAllocate($image, 236-$cien, 171-$cien, 83-$cien);
$color_mac_cien = ImageColorAllocate($image, 138-$cien, 43-$cien, 226-$cien);
$color_windows_cien = ImageColorAllocate($image, 102-$cien, 205-$cien, 170-$cien);
$color_firefox = ImageColorAllocate($image, 255, 204, 153);
$color_safari = ImageColorAllocate($image, 109, 105, 85);
$color_opera = ImageColorAllocate($image, 165, 42, 42);
$color_chrome = ImageColorAllocate($image, 69, 139, 0);
$color_ie = ImageColorAllocate($image, 95, 158, 160);
$color_firefox_cien = ImageColorAllocate($image, 255-$cien, 204-$cien, 153-$cien);
$color_safari_cien = ImageColorAllocate($image, 109-$cien, 105-$cien, 85-$cien);
$color_opera_cien = ImageColorAllocate($image, 165-$cien, 42-$cien, 42-$cien);
$color_chrome_cien = ImageColorAllocate($image, 69-$cien, 139-$cien, 0);
$color_ie_cien = ImageColorAllocate($image, 95-$cien, 158-$cien, 160-$cien);
// Otwieramy plik z danymi i ładujemy je do zmiennych
/*
Zawartość pliku z danymi przy takim ułożeniu powinna wyglądać tak:
linux|54|
mac|8|
windows|554|
firefox|180|
safari|15|
opera|19|
chrome|24|
ie|381|
Powyższe dane są skopiowane z mojego pliku ;]
Jeżeli "instalujesz" skrypt u siebie, pewnie chcesz zacząć liczyć od zera.
I tu pojawia się mikro problem gdyż jeśli damy wszędzie zera, php się obrazi że chcemy dzielić przez 0.
Dlatego, niestety albo przerabiamy skrypt na własną rękę :P lub po prostu wklejamy:
linux|1|
mac|1|
windows|1|
firefox|1|
safari|1|
opera|1|
chrome|1|
ie|1|
*/
$list = file(" PLIK / Z / DANYMI /");
for($go = "0"; $go < count($list); $go++){
list($eq, $number) = explode("|", $list[$go]);
switch ($eq) {
case "linux": $linux=$number; break;
case "mac": $mac=$number; break;
case "windows": $windows=$number; break;
case "firefox": $firefox=$number; break;
case "safari": $safari=$number; break;
case "opera": $opera=$number; break;
case "chrome": $chrome=$number; break;
case "ie": $ie=$number; break;
}
}
// 16 na 16 takie rozmiary mają wszystkie ikonki
$xx = 16;
$yy = 16;
// zmienne z zapisanymi w base64 ikonkami
$base_16x16[linux] = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kLBxElAgj7lmMAAAIeSURBVCjPZVBNSFRhFD338z2dmSQFfZAJzSpokRgJUTFZIES0EIzZVCspd7ZrIW50Ga2NQF32aKGBQqsW4c8mKSKUFMkc0BkmZ/J3/vR933dvi0c26Vmde+69nHsuiQj+QkSIKCShQkQhD3UATvV0SDY2Nufn5zzPSyQSsVgMJyAhmFlERPb29np6HgBoavKGhoaNMVVNERGFKm+GZLMZx43E6hvu37v7bnIilUqdMFBVVkxMjhtr9dRgX5uhrdbWC1rr42CnMpACiQkqN+KrnVfW06V472Bxe2cnzH2888+BIAq0vbOrmx+vBQMtbaPtHdfHRkettcx8KrSItTaXyyWTyZ/rP0rlQqFwMDLyCoDv+1IFVBe+7/f3PxMRYwJjgkwm3dXV5XnefwvMHH5NB/pm4vbK8vcgODTmyJhARHp7nwD4ODMTPpeZlYABBpDeTEf1t2h9MwggEAFS0nofQKlcPD5fAcJQWyvjdalHbwesP/40m90VgUAd/fp03s51d9Teac9qQBgCKAgIRKXlBlo60+hecj+8n34jjEq58nVxua+7PPEyKmsvzO/PoqAgDiAEgM4eFOuU7He2ObP51NT01MLCl6XZ12PPi4VSU03LNTAioqCYmK0IH5Zzlfzqfn5xfXG+XH/LbbyoyFFBNpKfjF9Nnrv80HVqWViByLBWopjAYmGt0brOjSrXAWDN0aHWETciJErVACQifwB4t3oxdoWNwwAAAABJRU5Erklinux|54|
mac|8|
windows|554|
firefox|180|
safari|15|
opera|19|
chrome|24|
ie|381|Jggg==";
$base_16x16[mac] = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kLBxEkNjBUU5cAAAIySURBVCjPbVJLTxNRGD3fvZeZzpR3CQ0WRIlFwgITcePGRF2Y+BdM/IHsDIkr3BEWxhdBN0aFQKO2pXTaDm1n7r3f52Ik0ejZnu+R8yARwd9gZgKx8DAbjy+z+fkZRURKFazCPyBSRNJN+i92998dfRHhP1nzvwUG1MHrTyoIl68tKK3o6q4IlLAIiwh7ZgCj8XCYjQFMaLuyGFcXZobDEQjMXoSJhNgzCESUpOnu7p7Nyfms1++t12/leX7RSTqdpFarPX/2VAREMCAQSX9wubPz8tHjB0GovCfnfK/X09oMlka542azdXLauLl6XUQKDWrv1cHm5m1r88GldZazLLPW2dyNxrkOg+XqzMpyrXDTFI8uknShWj3v9HLrvGfvvXOcWztI84lg9PDJfaM1REBkiBggKN1JBuFEmGfOOuu8AwiklDbjLC2X48I+AEqEADU7N9ds95Je6rwobYKgFARBGIZT5dh7+Xr6A0DhpiEFAOv1WmP/aGmxHJUmSTGzADBGK23iKPxw+K3bTe7d2RCBgRCI6zeW3h9+DsJ4vjJrjBEREdFaK0VZlpeiqWarBZBADABhRKV4Y33tZzuLJuPp8pRAvHNFwKUoP++c1FcrAAii6KpY21s3FEat9rl1abvdODs7bra/Z3bYODsm6tfrayICUlS0VQREnPQv37z9OB5mlcp0XI7SQdrpJnOz09t3t+IoKiaJmYkIAAsTyDnLzFqTUoaZnfPGaK2J6LewXzW9TYnH7c8cAAAAAElFTkSuQmCC";
$base_16x16[windows] = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kLBxEkG3WLD+IAAAJ0SURBVCjPTZLLS1RhGMaf9zvfnMuMM6OOlzKzMivMFpZYENKuRFsELVoUEbWKtm7sP2gbtIjWFYQEIYQNGFEZ0QWyG1FKEl5m0tFzzjiXM875vrfFZPksH57fs/oRMwMMgBkgwtYwAwCoNqhF1noiDrXSfoYKGawuVDkpOg+ZyW0EvYkBYBAk/v4K7WfU3ctWXVJ9nVqe38jE+4/cmrAdCQJYgQ0IaKXEJgt8fGhWCghKRqkS5P3cby/96c7NsYtza6+96tKM/+jeq9FytSi1ZkCzMDCd1qkGubJSDDZcl1rPDaVn0jPuePbd/badLbn17H4asaQpmJgFKXceq/PEdapQLrhBzuWmU0NfZp/WN6IxnnLMRi5ZnU0D0rClADMMymfl8NVyc6/uKyWPvk+Nv1s0fgWVohOLOFa9onVb79gW2wdiqQED1Rcr+5fcAysL8sdcBF7P9dFrz2dvR+KI2CLiGF45Z1QGtjd0MEMKoBDol9NWc0Lmfcp7G68nvUtnRU9C9l1If1ubkKA+s6vr2LDlxMFKAlhaNqpgSAoq5Pul3W1OTE5Njo0c69s1ePBENBq4i09c1ZZM7WaG1Aiza1oroxCE3rq5thycPF4/+/lBcwssXqzknzlqNesmO3oHAYBIhCH9nOP2uvKelmp7q7+xXu4+UMxl3iYcqrfMqC3DalgU/bGYA60JJKUQ5wZVNFoHaMC+csZennvz4XsxHpFGNKKNsORRouM8No2QgoTjRJmJySAlWlOiIXlY0A3tPbbjQVnG/ET3rr2nmQEwERH/c4uBLbIqpcNqAWSalk0AgwnEjC3Af6zWERHANeuppjSAPyM5NU7CatJbAAAAAElFTkSuQmCC";
$base_16x16[firefox] = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kLBxElEhVMhgcAAAOZSURBVDjLTdPbb1N1AAfw7+/3O+f09H5qaaXtZHQtW8cmAhOSdfXCgBDjzIxCMhNj4oMm8q4SjTwoIYvKiy8mhsSQYELUmCmJwzDUCDPNHERgbmMXBu26rRfWe7tz6fn5ZOLnf/gQ/M/Ic6N0vjscECjecAaUl3o73HvW8irWHtVmqosrP4Xqyxd+uTy0Dhw2C18BSv8oSHbpAvxsxXP2PJXOrUVfD3dt//jpnpCt3Ql0trtgmByz96soL05D/3u8ORi8e/rV3tvnyXGUAECw//mjxahsfFhK7Xr+MSXcF3CoGNy8yJNbcZLnIWSyDdQ0Crkp870e3To0VPxMax1O1Me2v2cbvrhA7rzic8he2x9SZMc+LllhFFM85Y6Qb576BJrOUS014fPZUN2sYeLsJb7PnyWXv/gdqLTNGeWeOHv/zT43YdV3UUk7eSkPqquErmXgXc/AMA2o7TG0NAMUFNF4L3HuT2Bj0cIP0kkfCXTdEUS77YRebQU4LByUEkI4PB47Yh4TKZeCZqmJhel7yCyksD++Bw7Zii2VEi3qhajc7Ke8tfUyDBOcgzAGMIHB6hBwJXQMSRKDWWkiu7SKwv2HWJmeQSldgGRuwN4VgbmYHxYa6ZIsUgNMYMit6ridbODWi2+h4A6iRSoAKII+Beu3SlienAKZn0LspA60ZtEqWj20MpuTmchAGcPqP2W0KSq6+BLqGzUg9wiPl5bhEwisZgtGYQO7Y5041jUHbfUBaNvuJUGt2a/p5eoBwQoe2SURuVlDtDKGA9oUfGIFTWbB1/koxlc3YZNlhKw1wC9xM9tNWHssKXDB921pqXjK+6RJnDscIHWCSpXht2kVc0YM9zQv/pq/C0DBB0ckJHp+hV4rENZxCLxavMRGRG+ZaOpeJqmdosI4F0xisUuIhjgWGm6sb3bAb6P46FAaw9E8gkqGi519hLozN3n94SgBgKsdO58VzNzYtn6vh4oal1wGoSKHLAmQJRGgAhpbJvRikdsHDKK88ISuLagjzkTqB/JfpIlI8G0tW/jcss3mBDfgijq46AARFQpmMzm1NIi1uw53nOqtFeWMciN3hnxKTHLj+Akkvv8OADAeCBzVy9VTIjMGwQFmFyG6OSwBDY5uAa6YbVKQ5HPXT6bHXgPh9SsDIAAwcfAZHJm6DgD4ORy2y37XTrPZGOD5XEhUJDh6/A+cnY6kKNfTHadnagCw9uVRBN+5in8BVL+KjcI/XMUAAAAASUVORK5CYII=";
$base_16x16[safari] = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kLBxEkJMPtIt8AAAOlSURBVDjLTZNfTFtlAMXPd7/7p7ctlNtyofwZTEBYkyIGMEaIEZiBBJ2ZT4aNmJFpnBITExLNiM9qXDK2GIwmhhl8mUqUkEhY0EzHcA7n6CKBAWVtKRRa2kJXenvb297rA4l63s8v5+F3CP6XkZERzM7OMqIoNnMc9+SJhhM/1TfUq+ffOJ9LK2kdAF49fRo/Tk7+2yEA0NPTg5mZGRBCMDQ0VN7V1XVB1/UzZrN4m6FUpYT6VFW9093TPQ8gPzg4iNHR0SNAU1MTPB4PCCEYHx9/rb29/f0/7vzemMlkOTWTB6EEIk8hCEKCF0y/XLl65d25W3OhcwMD+PrataMFADA2NvZWW1vbpW+vXy8gZicqquoMjgqgPMVeOELUgy2kUxHYJYf3ux8mOuZvzW13dHSAAsDw8PDTra2tX0xNTcmaUINjtY0QRAsRBBNR0gaxFTnA6AIYljNC216HXCzXLSwsTPj9fp1pbm5hZVk+s7T0oDKmlxqMVIGVrTj+fBgGeIr7m48RXrwHsuHByr5EKuvcyOW0k2fP9ncCAO3r67NmM5nLotXuWI4WImUwRKMMHMVWMBY7ytZ/g+3BJKYLO1DqLIPGcka9zPKx2L4PFHO0qqpaKrIVfsRay7CWsBBfNIttVcOjuAHH2ixOrnyO4MsXIT7RiHAiC0WjcJfkSWRvL+IscU6x+XzOJBXZkMozYAUTau0i2pvKYS0Q0Fpci8ujSTzm6rG+EUYySVAu6qS7zEAkErEqqTTDut3uQ5NoUZyyaL6rmZESzPjGs4f3nhHx2Y0gyk69DVHXoIkU8QOKGnpo5DJ+srbu3U0mEnlmcfG+su5dv1vI63AW5IwgOLzgKsCEL41Vuxs1Thv+TjIwSxJ4qwnnWuzEs7SMra2teyurD7N0dXVVk+wOLplSXhnoeZaENQN7gg3JglKkCA+SNJDgRRCOoP84i1o9go8/vRSIx+OfZFQ1TAFgw+sNaFquhWFQ885Lz2EnAyPFmYjFKmDf4FFdlDf6Kwy0Ckny5oVBbXszeDUej30PANTlciEajaYTBwcLj/y+p/w+X/WphhLSLgFN5iy6pEM8z8VI8K958sHwh8pmIPDl7u7ORQDgef5I5d7eXkxPT4NlaakkOV4vluV+l8vlrjxWwfC8gO3QzuHy8vKv8Vj0q2AgMAXAsJjNSCnKf1/ofLETN3++CQCM3e4oIgypoCwr8zyv8RwfSqeVnZ1QSAEAk8kEVVUBAP8AftmAMMnB1FAAAAAASUVORK5CYII=";
$base_16x16[opera] = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kLBxEkLiM4y8EAAANUSURBVDjLbZNbbBRlFMf/3zffzOy1s9vdtpRm6bbbsd1a+6BJESvUgooloRi1rYrGkGhifFDCA8YH45MxwRA1ohETbWJKYyIxgWovkvBAeSB4AaVUsbDQUrZl3el2d/Y2l53PBwNpiufp5Pzy/+UkJwf4nzoebbjbn90YFJKdcZf9+HaZf/ElvTPPHHwbfMdmkPXh7zo6MDAzg9cB+aU29THRcR6VRTEuiMySqqr+lJrV89G+3dNk6LnCb4cO3SsAgHdDSnBXVD0sc+dF6vHKw8nkxZKeXXha8fRXKwHT7/WNxWNN++nwsUW2NlgvufBqwwZxV7TlvZjbt08v5HDRLc19krj2MADDQ8MjA4TvTeWyz8qMMfOFgSG6VrBklhFs72yObdnyVigSQTiyCanZ348CMADgs4z+edHh4JUKz2RX9xSC1d10/fqtbfFXanb2gW7t5ggHsXI7feYOs0zj15tWBUygRE+nUSbstXsE9Xq+F7/8DLjcxABQNKy5NdjQOTICZWCSC6XriS62XqBdntmUWlwEc3vh6BreB1bXcsIkTZbcwQooeE6vZV+PnnVTQrdJkvgyCyibCweG6m7lMzCcCur8VRiduDzpBhkTKPmxf2f8RiAQtoJ+P8q2DcYJo4LAPqaCMAlC93plydQyqauFUg75nAYui5xblScN0z7CuX1t8tyNj1oe7PJEmlpQE6qDJLAsFRjb7QAwTQvEspuL6v21TrkAyzaBKj/xactvcAJdL5To6oq+n6pqo9izjYfVGKjE/qayJB4lHKCE8HQ64/I+NRjM6VkOQriRy6H3209nBUUZEKicu53W4P9nCWiLg6gqknr2OBVE6QPZJY6BgHDuABvbsdD6EATuIL20CH9b0/ODPY1TnlDoHfOvC2ZrsQSsaGTZLCcLjY3fEACYvpCRkvMLB2yrPOiAduRvJUT52Ieomb+Czp4dZnVdw8Gpn6YSvtqG0Sdi9/kysWjq0vXEvt7hr8bJ9xOzeKavHQBw4tSVSLlYfMBh4tb8/FyXNf1Di3L1j/pqyxCNYhFKIKwpkabxm7JwZM/oyHkA/z3TydMJ9G9vvnvr8dMJZnsV6dKZCdE7OSJ4E7MkILsJ9wfs5ZoNpTfHTxgAcPiRbvwL9y1V+7gFg70AAAAASUVORK5CYII=";
$base_16x16[chrome] = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kLBxEkEgxXt0YAAAOeSURBVDjLPctdaFtVAAfw/7nn5N7c3HuTNG1at3SLWtvR0TJT1rKuK7ayjhWpVuksWNiXCI4pzgcRESlTRHzQh0ERhSFzTKYTLZv6IKzIHtbiOmelm9hEl2Tt0qXmo/m4ublfxyf9vf8IABx560Wc++AsAODL3bvFRk3TyoHAzoZQKOahVNisVH5TDON2nvPNidlZEwCmNQ2ny2WQqZkjuHDyHAAgdGwwcmWpOu1R1Rc8+bwC0wQAwOeDyZhR1fWL1UJhZiyTWQSAaUnC/1658ebxp48eurW2bx9f8fl4HODp5mY3HYm4K4LAlwH+uyjyBVFc/56Ql/57FACe+mZ89PG2XWcDdkv0ieQ6V/N5Uj40get+H7kXbiItw0PYInnhTaW44jiqSunQcyF58Yua9Tc9+NlYgDTQ80G/PyrLEleD3SRDKT4sciwPnEBcacO36SQi3R2IVivEm81yhXOJRpSugwPNF+nWkdYDVpP7+mp9jWthlRh1Py6nKe4OvIr2aCciXd1IbzuAn+8m4GkxkfIxkhT8nHK65e4OZ1Fgfs9kUS/Csi0U9Dyk5gbEDReWJSPodbBVtdCIOoyghuBwO/rPhNH8kYL5/S3IWrWjzHacPl3XwURG7nvXISkETiGB+8Uk5lPtCGYYEpUi6n/8iobeEB4N/YWonCPdrTKSKW8PM4w6rTt1VMUqBI+AhBrHzl1BWLc/x53yKFzqg5peQGctjt7YCHg9A9uV4boETBIZVQb9e12RdxmOwZnASNbNYk9sL5RcDoGbc2gvLyEWqOCN1/rxiP8CXLsK0yKo6iLyJfkmQ5F/LajCZLlUhiAIcLmLq8ZVxAIxPPvydnTvYAj67kFjl8BradiOAKNOueWqJFdWv2Ky6J3jtrCSN/Mdpc0Sh85IRyqKydESeh5LgPI8YGXAa5twHAGmKfBaXSZFPZxjoucSfXAtY/SM9a6Lsm98tbTGYit9/OPjYdL58A0IZhawH4A7JTgOgVGnvFL1EcPd7mYLysn9U3PXKQAkfvzzztDzw1VVaeg3meHtFAtoD8U5nA3iOga3bBGmKRPdCpOava2ysam8Ozjx0wwA0MFTw0gvJLE8u7QwMvHkvEcVmm5teDtWcxJpaxThE4PEcCKkbIRRqGrfFcraqT3P/HAeAM6c7gUBgLH3xnHlnVkAwOFPj8kb/5QekiQ2REQ3crjVTjWaq1lFU5fyRac4MnXNAIBP3u/Dibd/wb91xJ9RV/kWuAAAAABJRU5ErkJggg==";
$base_16x16[ie] = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kLBxElC3EnLscAAANfSURBVDjLlZNtTFN3FMaf/31pae0qtA5LgQAFukCIOurC1kHiyBhiTHSRJboNWOaiYXOSsIX4QmJiNs2+LFkcbuwlyzBG0Ck6xZdo1EgYsk0ilrEUWliDldaW29Je+3Zv738fCCTui9n5es7vyZNzzkPwP4o+OUjEcScvpdSyoeakMtNbC/Lfoc2d3+DSZ61Pg/QQjz8vV0bCaY3MZKtigUg4pWRMFL99U3xKwFxSgUeucQDgGrY21lU3vFdkNw2xJVLfmkCUGXzRGvrN6TAGVCuMVqIxCEWNA+5luHTdywCAfGtFQ0v7odneQWfMO/Fdcn7ojeTV+w/SHd+eEawbtrcCgOdai8l7vdkEANySwNT9uygotzXlrH21J6+yDOvVXQh7nXJP5KgSj/mYmD47q3DT1uMRhckvqP/5QPju+yoAYD/Y047R34dRXVlZNENMF2s2mlXtthES908+2tFr/9IxMX7GlVYbPVxWfpB7jkaTKbtZonf2HT3n/qV7J3Bv5O9FC3zx4R0db8rTo83KvbM1tP6tTUeMgLEEyMrb9fk23eEBUdN5nmp3fa1oX6j7cck5Z6sqAwC822ywtLxuYleFbuHjm3ZcS5S3qQ8e+DCu0wJqnpXklFYJeaD4BULSSkHd2tWa62P+OLd4ppHsi1e+L6nCMM55ijAwacPKcnNQp8E8yyRApQRV4iIjJcKgkkg4FX2YV2FnMdYPjiavEiDQ/FohX7UwNYfdNzopmycRLY11ezurjwDAO0179Q8sG7clMlYRusKIlXrW/dPJfhEAOMpqzZCCe3XiCFrP25BM64jekgNdNvuJdV9vhrgQ/WfYUtYkKPoNUSGC9GwIBX5fy/IOCKtRpFAgMxKMukPzq/czwtBp7pWdyC3ONNhqLfsJw6RHp+Oq6OQCqOBCzhNnl2fG0QMATbvbwAClQuLxzMBCRHZcunDlrFl+uD4x+seEd1pIeoW07A/L1OeLxcWxv4LPz95qm3P078ld1wgAONH91WIWvH1rXkqIQgeTkr4ozNeFwOv4tjv1VcfmaimnymCYx3P+LcKvt0/fPhU31XwE32DX8gcTAJA8nzKzl09tJlTJ5TNz3Rot7zFsGZ4iBMozI+q7YAcABKaPwXXczLv66pilnuuH0mfy/wKKN3hTR+9mHAAAAABJRU5ErkJggg==";
// Systemy wykres
$systemy_je = 360/($linux+$mac+$windows); // w tej zmiennej mamy ile ma wynosić 1 przesunięcie w kole
$systemy_start = 20;
/*
ta zmienna jest raczej dla polepszenia wyglądu wykresu, gdyż funkcja (którą zaraz będziemy rysować poszczególne kawałki koła)
zaczyna rysować od hmm godziny 9 :D dlatego gdy będzie lekkie przesunięcie,
zaczniemy rysować np. od 11 i dzięki temu wykres nie będzie wyglądać tak symetrycznie
*/
$linux_end = $systemy_start+$systemy_je*$linux;
$mac_end = $systemy_start+$systemy_je*($linux+$mac);
$windows_end = $systemy_start+$systemy_je*($linux+$mac+$windows);
//powyżej policzyliśmy dla każdego systemu ile w kole się wyrysuje
// rysowanie pierwszego koła
$x = 55;
$y = 42;
$width = 105;
$height = 80;
// najpierw cień
for ($i = $y+10; $i > $y; $i--) {
if($linux<>0) ImageFilledArc($image, $x, $i, $width, $height, $systemy_start, $linux_end, $color_linux_cien, IMG_ARC_PIE);
if($mac<>0) ImageFilledArc($image, $x, $i, $width, $height, $linux_end, $mac_end, $color_mac_cien, IMG_ARC_PIE);
if($windows<>0) ImageFilledArc($image, $x, $i, $width, $height, $mac_end, $windows_end, $color_windows_cien, IMG_ARC_PIE);
}
// a dopiero później zwieńczenie
if($linux<>0) ImageFilledArc($image, $x, $y, $width, $height, $systemy_start, $linux_end, $color_linux, IMG_ARC_PIE);
if($mac<>0) ImageFilledArc($image, $x, $y, $width, $height, $linux_end, $mac_end, $color_mac, IMG_ARC_PIE);
if($windows<>0) ImageFilledArc($image, $x, $y, $width, $height, $mac_end, $windows_end, $color_windows, IMG_ARC_PIE);
// Systemy legenda
function wklej_ikonke($i, $co, $mini_color) { // funkcja ta wkleja nam ikonki i rysuje kwadracik z odpowiednim kolorem w środku
global $ikona, $pozycja_x, $pozycja_y, $xx, $yy, $image, $black;
ImageFilledRectangle($image, $pozycja_x+$i*20+4, $pozycja_y+24+2, $pozycja_x+$i*20+10, $pozycja_y+24+8, $mini_color); // środek kwadracika
$base_ikona = base64_decode($co); //dekodowanie ikonki
$ikona = ImageCreateFromString($base_ikona); // tworzenie obrazu ikonki z tekstu
ImageCopy($image, $ikona, $pozycja_x+$i*20, $pozycja_y, 0, 0, $xx, $yy); // wklejanie gotowego obrazka ikonki w odpowiednie miejsce
ImageRectangle($image, $pozycja_x+$i*20+2, $pozycja_y+24, $pozycja_x+$i*20+12, $pozycja_y+34, $black); // rysowanie czarnej ramy dla kwadracika
}
// Tutaj zamiast pętli takie cóś
$pozycja_x = $x-($width/2)+5;
$pozycja_y = $y+$height;
$i=1;
wklej_ikonke($i, $base_16x16[linux], $color_linux);
$i++;
wklej_ikonke($i, $base_16x16[mac], $color_mac);
$i++;
wklej_ikonke($i, $base_16x16[windows], $color_windows);
// Przeglądarki wykres (analogicznie jak wykres dla przeglądarek, więc pomijam opisywanie)
$przegladarki_je = 360/($firefox+$safari+$opera+$chrome+$ie);
$przegladarki_start = 20;
$firefox_end = $przegladarki_start+$przegladarki_je*$firefox;
$safari_end = $przegladarki_start+$przegladarki_je*($firefox+$safari);
$opera_end = $przegladarki_start+$przegladarki_je*($firefox+$safari+$opera);
$chrome_end = $przegladarki_start+$przegladarki_je*($firefox+$safari+$opera+$chrome);
$ie_end = $przegladarki_start+$przegladarki_je*($firefox+$safari+$opera+$chrome+$ie);
$x = 170;
$y = 42;
$width = 105;
$height = 80;
for ($i = $y+10; $i > $y; $i--) {
if($firefox<>0) ImageFilledArc($image, $x, $i, $width, $height, $przegladarki_start, $firefox_end, $color_firefox_cien, IMG_ARC_PIE);
if($safari<>0) ImageFilledArc($image, $x, $i, $width, $height, $firefox_end, $safari_end, $color_safari_cien, IMG_ARC_PIE);
if($opera<>0) ImageFilledArc($image, $x, $i, $width, $height, $safari_end, $opera_end, $color_opera_cien, IMG_ARC_PIE);
if($chrome<>0) ImageFilledArc($image, $x, $i, $width, $height, $opera_end, $chrome_end, $color_chrome_cien, IMG_ARC_PIE);
if($ie<>0) ImageFilledArc($image, $x, $i, $width, $height, $chrome_end, $ie_end, $color_ie_cien, IMG_ARC_PIE);
}
if($firefox<>0) ImageFilledArc($image, $x, $y, $width, $height, $przegladarki_start, $firefox_end, $color_firefox, IMG_ARC_PIE);
if($safari<>0) ImageFilledArc($image, $x, $y, $width, $height, $firefox_end, $safari_end, $color_safari, IMG_ARC_PIE);
if($opera<>0) ImageFilledArc($image, $x, $y, $width, $height, $safari_end, $opera_end, $color_opera, IMG_ARC_PIE);
if($chrome<>0) ImageFilledArc($image, $x, $y, $width, $height, $opera_end, $chrome_end, $color_chrome, IMG_ARC_PIE);
if($ie<>0) ImageFilledArc($image, $x, $y, $width, $height, $chrome_end, $ie_end, $color_ie, IMG_ARC_PIE);
// Przeglądarki legenda
$pozycja_x = $x-($width/2)-15;
$pozycja_y = $y+$height;
$i=1;
wklej_ikonke($i, $base_16x16[firefox], $color_firefox);
$i++;
wklej_ikonke($i, $base_16x16[safari], $color_safari);
$i++;
wklej_ikonke($i, $base_16x16[opera], $color_opera);
$i++;
wklej_ikonke($i, $base_16x16[chrome], $color_chrome);
$i++;
wklej_ikonke($i, $base_16x16[ie], $color_ie);
// To obrazek jest i destrukcja ;]
Header('Content-type: image/png');
ImagePng($image);
ImageDestroy($image);
?>
Pozdrawiam.
SUPER ! Tylko przydało by się, wygładzić jakoś krawędzie ;)