5R]G]LDã*UDILNDZ3+3
52='=,$â
*UDILNDZ3+3
%\üPR*H]DVWDQDZLDV]VL F]\PUy*QLVL JUDILNDZ3+3RGJUDILNLZ]Z\Ná\P+70/-u.
7ZRU]FVWURQ\:::QDSHZQRRSDWU\ZDáHMHLOXVWUDFMDPLD]QDF]QLNIMG i jego atrybuty
]SHZQRFLQLHV&LREFH'RP\ODV]VL WDN*H*HXPLeszczenie znacznika IMG w danych
Z\SLV\ZDQ\FK SU]H] VNU\SW 3+3 ]DRZRFXMH LOXVWUDFM QD RGSRZLHGQLP PLHMVFX VWURQ\
:::3RFRZL FWHPDWRZLSRZL FDüFDá\UR]G]LDá"
2GSRZLHG(QLHMHVWVNRPSOLNRZDQD1LHE G]LHP\]DMPRZDüVL WXWDMVWDW\F]QJUDILNGo-
áF]DQGRGRNXPHQWyZ+70/]SOLNyZz ilustracjami. Natomiast omówimy w tym rozdziale dynamiczneWZRU]HQLHLOXVWUDFMLSU]H]VNU\SWG]LDáDMF\QDVHUZerze.
àDWZRVL GRP\OLüMDNLHWRQLHVLH]DVREPR*OLZRFL% G]LHPR*QDLOXVWURZDüUy*QHLn-
formacMH JUDILNDPL QD SRGVWDZLH ]HEUDQ\FK GDQ\FK 1LH WU]HED Z W\P FHOX WZRU]\ü ZLHOX
LOXVWUDFMLLZ\ELHUDüWDNLHMNWyUD&LRGSRZLDGD3RSURVWXXWZRU]\V]MVRELHDUDF]HMX*\t-NRZQLNRZLZF]DVLHU]HF]\ZLVW\PF]\OLZWHG\JG\E G]LHSRWU]HEQD
Zacznijmy od pRND]DQLD*HWRMHVWEDUG]RáDWZH3RPR*HQDPZW\PSRQL*V]HüZLF]HQLH
ýZLF]HQLH
8WZyU]SURJUDPNWyU\SU]\JRWXMHLZ\ZLHWOLLOXVWUDFM ZIRUPDFLH-3*3RVWDUDMVL DE\
E\áDWRELDáDNUDWNDQDF]DUQ\PWOHRUR]PLDUDFK[
Nie bardzo wiadoPRMDNVL ]DEUDüGRWDNLHJR]DGDQLDDW\PF]DVHPJG\]QDP\PHWRG
MHVWWREDUG]RáDWZH3U]\JRWRZDQLHLZ\ZLHWOHQLHLOXVWUDFMLRGE\ZDVL ZNLONXHWDSDFK
1DOH*\Z\ZLHWOLüQDJáyZHNGRNXPHQWXZáDFLZ\GODIRUPDWXJUDILNL:SU]\SDGNXJUDIi-ki JPG jest to:
Content-type: image/jpeg
Pomaga w tym funkcja header.
KHDGHU
3U]HV\áDQDJáyZHNRNUHORQ\MDNRSDUDPHWU
1DVW SQLHQDOH*\XWZRU]\üU\VXQHNX*\ZDMFIXQNFMLcreateimage. Funkcja ta zwraca zmien-QNWyUDMHVWMHJRLGHQW\ILNDWRUHP
103
3+3²þZLF]HQLDSUDNW\F]QH
LPDJHFUHDWH
Tworzy rysunek. ParDPHWU\RNUHODMMHJRUR]PLDU
w SLNVHODFKDIXQNFMD]ZUDFD]PLHQQE GFMHJR
identyfikatorem.
:VSyáU] GQHLOXVWUDFMLVOLF]RQHRGOHZHJRJyUQHJRURJX3LHUZV]DZVSyáU] GQDGRW\F]\
osi poziomej, a druga – pionowej.
Na tak utworzonej iOXVWUDFML PR*HP\ GRNRQ\ZDü SU]HUy*Q\FK RSHUDFML : W\P üZLF]HQLX
X*\MHP\WU]HFKGHILQLRZDQLDNRORUyZZ\SHáQLHQLDNRORUHPRUD]U\VRZDQLDOLQLL
LPDJHFRORUDOORFDWH
Definiowanie koloru dla rysunku. Kolejnymi argumen-
WDPLV]PLHQQDE GFDLGHQW\ILNDWRUHPrysunku oraz
VNáDGRZHNRORUX5*L%RGGR)XQNFMD]ZUa-
ca identyfikator koloru.
LPDJHILOO
:\SHáQLHQLHU\VXQNXLGHQW\ILNDWRUMHVWSLHUZV]\P
DUJXPHQWHPNRORUHPVWDQRZLF\PF]ZDUW\DUJXPHQW
'UXJLLWU]HFLDUJXPHQWWRZVSyáU] GQHRGNWyU\FK
ro]SRF]\QDVL Z\SHáQLDQLHREV]DUXMDNRREV]DUUR]u-
PLDQHVSLNVHOHMHGQHJRNRORUXDMDNLNROZLHNLQQ\
kolor stanowi brzeg).
LPDJHOLQH
W rysunku, którego identyfikator jest pierwszym argu-
PHQWHPU\VXMHOLQL RZVSyáU] GQ\FKSRF]WNXLNRFD
podanych w kolejnych czterech parametrach. Kolor linii
MHVWRNUHORQ\V]yVW\PSDUDPHWUHP
:\ZLHWOHQLHSU]\JRWRZDQHMLOXVWUDFMLZIRUPDFLH-3*MHVWUHDOL]RZDQHSU]H]IXQNFM imagejpeg.
,VWQLHMWDN*HIXQNFMHZ\ZLHWODMFHLOXVWUDFMHZLQQ\FKIRUPDWDFK3DPL WDM*HPXsisz za-
FKRZDü]JRGQRüZ\V\áDQHJRQDJáyZNDGRNXPHQWX]IRUPDWHPU\VXQNX
LPDJHMSJ
:\ZLHWOHQLHLOXVWUDFMLZIRUPDFLH-3*$UJXPHQW
funkcji jest identyfikatorem ilustracji.
LPDJHJLI
:\ZLHWOHQLHLOXVWUDFMLZIRUPDFLH*,)$UJXPHQW
funkcji jest identyfikatorem ilustracji.
LPDJHSQJ
:\ZLHWOHQLHLOXVWUDFMLZIRUPDFLH31*$UJXPHQW
funkcji jest identyfikatorem ilustracji.
&DáRüSURJUDPXSU]HGVWDZLDVL QDVW SXMFR
SKS
<?
3URJUDPWZRU]\LOXVWUDFM ]ELDáNUDWNQDF]DUQ\PWOH
header("Content-type: image/jpeg");
$rysunek = imagecreate (100,100);
$kolorbialy = imagecolorallocate ($rysunek, 255, 255, 255); $kolorczarny = imagecolorallocate ($rysunek, 0, 0, 0);
imagefill ($rysunek, 0, 0, $kolorczarny);
for ($i=1; $i<10; $i++) {
104
5R]G]LDã*UDILNDZ3+3
imageline ($rysunek, 10*$i, 0, 10*$i, 100, $kolorbialy);
imageline ($rysunek, 0, 10*$i, 100, 10*$i, $kolorbialy);
}
imagejpeg ($rysunek);
?>
(IHNWHPG]LDáDQLDMHVWU\VXQHNZIRUPDFLH-3*RZ\PLDUDFK[SU]HGVWDZLDMF\V]a-FKRZQLF
5\VXQHN:\QLNG]LDáDQLDVNU\SWX – kratkowany JPG
-H*HOL Z SURJUDPLH SRSHáQLáH EáG QLH ]REDF]\V] LQIRUPDFML R W\P Z RNQLH SU]HJOGDUNL
ZV]DNQDJáyZHNNWyU\]RVWDáGRQLHMSRVáDQ\WRQDJáyZHNJUDILF]Q\DQLHWHNVWRZ\-e*e-OLLOXVWUDFMDNWyUFKFHV]Z\ZLHWOLüQLHSRMDZLVL VSUZDG((UyGáRVWURQ\-H*HOLSURJUDP
Z\JHQHURZDáMDNLNRPXQLNDWREá G]LHWDPQDSHZQRJR]QDMG]LHV]
0R*QD]DGDüS\WDQLHGODF]HJRGRSURVWHJRGZXNRORURZHJRU\VXQNX]DVWRVRZDOLP\IRr-PDW-3*DQLH*,)7HQGUXJL]DSHZQLáE\SUDZGRSRGREQLHPQLHMV]\SOLNLEUDNVWUDWSRd-F]DVNRPSUHVML7RSUDZGD-HVWMHGQDNSHZLHQSUREOHP-H*HOLPDV]]DLQVWDORZDQ\SDNLHW
PHPTriad, prawdopodREQLH QLH REVáXJXMH RQ IRUPDWX *,) 1LH ZLHU]\V]" =DPLH Z So-SU]HGQLPüZLF]HQLXZLHUV]ZyZLHWODMF\QDJáyZHNQD
header("Content-type: image/gif");
RUD]]PLHSROHFHQLHZ\ZLHWOHQLDQD
imagegif ($rysunek);
-H*HOLLOXVWUDFMDQLHZ\ZLHWOLVL SRSUDZQLHVSUDZG((UyGáRVWURQ\DZV]\VWNRVWDQLHVL Ma-
VQH7DZHUVMDELEOLRWHNL*'VáX*FHMGRPDQLSXORZDQLDU\VXQNDPLNWyUHMX*\ZDV]QLH
posiada obVáXJLIRUPDWX*,)
-H*HOLNRU]\VWDV]]SXEOLF]QHJRVHUZHUD:::]REVáXJ3+3SUDZGRSRGREQLHGRVWDZFD
XVáXJUR]ZL]DáWHQSUREOHP]D&LHELH-HOLMHGQDNZ\NRQXMHV]üZLF]HQLDQDZáDVQ\PVHr-ZHU]HSRGNRQWUROV\VWHPX:LQGRZVSUDZGRSRGREQLHSRMDZLVL PDá\NáRSRW
*G\E\QLHGDáRVL WHJRSUREOHPXUR]ZL]DüE\áDE\WRWUDJHGLD)RUPDW31*QLHMHVWMHVz-F]HZ\VWDUF]DMFo rozpowszechniony, a JPG posiada swoje ograniczenia. W niektórych sy-WXDFMDFKWDNVL VNáDGDZSU]\SDGNXJHQHURZDQLDJUDILNLSRVWURQLHVHUZHUDG]LHMHVL WDN
QDMF] FLHMLVWQLHMHSRWU]HEDZ\NRU]\VWDQLDIRUPDWX*,)
105
3+3²þZLF]HQLDSUDNW\F]QH
1DV]F] FLHGDZQLHMELEOLRWHND*'obsáXJLZDáDIRUPDW*,):\VWDUF]\ZL FW ZHUVM NWó-
U G\VSRQXMHV] ]DVWSLü RGSRZLHGQL 2GSRZLHGQL ZHUVM GOD :LQGRZV ]QDMG]LHV] SRG
adresem: http://aki.a4.pl/ksiazki/cwphp4/php_gd_gif_404.zip (158 kB).
FLJQL W\ SOLN PXVLV] UR]SDNRZDü D QDVW SQLH SOLN php_gd.dll VNRSLRZDü GR NDWDORJX
php\extensions VZRMHM LQVWDODFML D ZL F ]DSHZQH GR c:\apache\php\extensions). Plik, który PLDáHZW\PNDWDORJXGRWHMSRU\QDZV]HONLZ\SDGHNQDMSLHUZ]Drchiwizuj.
2GWHJRPRPHQWXSRZLQLHQHEH]SUREOHPXWZRU]\üLZ\ZLHWODüWDN*HLOXVWUDFMHZIRUPa-FLH*,)6SUDZG]LP\F]\WDNVL VWDáRZQDVW SQ\PüZLF]HQLX
ýZLF]HQLH
8WZyU] SRGREQ V]DFKRZQLF MDN Z üZLF]HQLX *UDILN Z\ZLHWO Z IRUPDFLH *, F,
a ND*GHSROHV]DFKRZQLF\Z\SHáQLMORVRZ\PNRORUHP
:S WOLGODND*GHJR]HSyOV]DFKRZQLF\E G]LHP\ORVRZDüNRORU-H*HOLFKFHP\E\
ZDUWRüND*GHM]HVNáDGRZ\FK]DZLHUDáDVL ZSU]HG]LDOH−Z\ZRáDQLHIXQNFMLSRZLn-
QRPLHüQDVW SXMFSRVWDü
imagecolorallocate ($rysunek, rand()%256, rand()%256, rand()%256); 1LHQDOH*\]DSRPLQDüR]DLQLFMRZDQLXJHQHUDWRUDOLF]ESVHXGRORVRZ\FKIXQNFMsrand.
SKS
<?
3URJUDPWZRU]\LOXVWUDFM ]ELDáNUDWN.D*GHSROH
MHVWZ\SHáQLRQHORVRZ\PNRORUHm.
header("Content-type: image/gif");
$rysunek = imagecreate (100,100);
$kolorbialy = imagecolorallocate ($rysunek, 255, 255, 255); $kolorczarny = imagecolorallocate ($rysunek, 0, 0, 0);
imagefill ($rysunek, 0, 0, $kolorczarny);
for ($i=1; $i<10; $i++) {
imageline ($rysunek, 10*$i, 0, 10*$i, 100, $kolorbialy);
imageline ($rysunek, 0, 10*$i, 100, 10*$i, $kolorbialy);
}
srand(time());
for ($x=0; $x<10; $x++) {
for ($y=0; $y<10; $y++) {
$kolorlosowy = imagecolorallocate
($rysunek, rand()%256, rand()%256, rand()%256);
imagefill ($rysunek, 5+$x*10, 5+$y*10, $kolorlosowy);
}
}
imagegif ($rysunek);
?>
:\SHáQLHQLHND*GHJRSRODUHDOL]XMHP\IXQNFMimagefill.RORUMHVWRF]\ZLFLHW\PZ\EUa-Q\PORVRZRZND*G\PSU]HELHJXS WOL-DNRPLHMVFHRGNWyUHJRQDOH*\UR]SRF]üZ\SHá
QLDQLH Z\ELHUDP\ OH*F\ PQLHM ZL FHM Z URGNX ND*GHJR ] SyO SXQNW R ZVSyáU] GQ\FK
(5+$x*10, 5+$y*10), gdzie $x i $yVRGSRZLHGQLPLQXPHUDPLZSLRQLHLSR]iomie danego pola (liczonymi od 0).
106
5R]G]LDã*UDILNDZ3+3
(IHNWG]LDáDQLDSURJUDPXSU]HGVWDZLDSRQL*V]DLOXVWUDFMDNWyUD]SHZQRFLWUDFLQDHIHk-WRZQRFL]SRZodu braku kolorów.
Rysunek 5.2. Szachow QLFDZ\SHáQLRQDORVRZ\PLNRORUDPL
=DXZD**HZQDJáyZNX]RVWDáSRGDQ\RGSRZLHGQLW\SSOLNX
header("Content-type: image/gif");
LZ\NRU]\VWDQRZáDFLZIXQNFM Z\ZLHWOHQLDLOXVWUDFMLimagegif).
7ZRU]F ZáDVQH JUDILNL SU]\ SRPRF\ PRGXáX *' PR*HV] NRQWURORZDü NRORU ND*GHJR
pikseOD SDPL WDMF R RJUDQLF]HQLDFK ND*GHJR ] IRUPDWyZ JUDILF]Q\FK 6SUyEXMHP\ WHJR
doNRQDüZQDVW SQ\PüZLF]HQLX
ýZLF]HQLH
Napisz program, który w rysunku w formacie GIF o wymiarach 100x100 wylosuje i zakolo-ruje 300 punktów F]HUZRQ\FK L F]DUQ\FK SXQNW\ Z NROHMQ\FK ORVRZDQLDFK PRJ VL
SRZWDU]Dü
:\NRU]\VWDP\IXQNFM NWyUDRNUHODNRORUSRMHG\QF]HJRSLNVHOD
LPDJHVHWSL[HO
'ODU\VXQNXRNUHORQHJRSU]H]SLHUZV]\DUJXPHQW
GHILQLXMHNRORUSLNVHODRZVSyáU] GQ\FKSRGDQ\FK przez
GUXJLLWU]HFLDUJXPHQW&]ZDUW\DUJXPHQWRNUHODNRORU
1LHPXVLP\PDUWZLüVL RSRZWyU]HQLDZ\ORVRZDQ\FKSXQNWyZ:]ZL]NX]W\PZS WOL
ORVXMHP\ZVSyáU] GQHF]HUZRQHJRLF]DUQHJRSXQNWX
SKS
<?
// Program losuje 300 punktów czerwonych i czarnych i zaznacza je.
header("Content-type: image/gif");
$rysunek = imagecreate (100,100);
$kolorbialy = imagecolorallocate ($rysunek, 255, 255, 255); $kolorczerwony = imagecolorallocate ($rysunek, 255, 0, 0);
$kolorczarny = imagecolorallocate ($rysunek, 0, 0, 0);
107
3+3²þZLF]HQLDSUDNW\F]QH
imagefill ($rysunek, 0, 0, $kolorbialy);
srand(time());
for ($i=1; $i<=300; $i++) {
imagesetpixel ($rysunek, rand()%100-1, rand()%100-1, $kolorczerwony); imagesetpixel ($rysunek, rand()%100-1, rand()%100-1, $kolorczarny);
}
imagegif ($rysunek);
?>
']LDáDQLHSURJUDPXSRND]XMHSRQL*V]DLOXVWUDFMDFKRüWUXGQRE G]LHGRVWU]HFUy*QLF So-
PL G]\F]HUZRQ\PLLF]DUQ\PLSXQNWDPL
Rysunek 5.3. Losowe czerwone i czarne piksele
,VWQLHMHZLHOHIXQNFMLNWyUHPRG\ILNXMU\VXQNL:DUWR]DSR]QDüVL ]QLHNWyU\PL]QLFK
ýZLF]HQLH
1DSLV]SURJUDPNWyU\ZU\VXQNXZIRUPDFLH*,)RZ\PLDUDFK[QDU\VXMHSL üRNU
JyZF]HUZRQ\FKLSL üF]DUQ\FKZORVRZ\FKPLHMVFDFK
1LH PD IXQNFML U\VXMFHM RNUJ DOH VNRU]\VWDP\ ] EDUG]iej ogólnej, która rysuje wycinek elipsy.
LPDJHDUF
5\VXMHZ\FLQHNHOLSV\.ROHMQ\PLDUJXPHQWDPLV
LGHQW\ILNDWRUU\VXQNXZVSyáU] GQD[URGNDáXNX
ZVSyáU] GQD\URGNDáXNXV]HURNRüáXNXZ\VRNRü
áXNXNWSRF]WNXNWNRFDNRORU
-H*HOLZZ\ZRáDQLXIXQNFMLV]HURNRüLZ\VRNRüE GVRELHUyZQHDáXNE G]LHSHáHQRG
0 GRVWRSQLWRU\VRZDQ\áXNRND*HVL RNU JLHP
SKS
<?
3URJUDPWZRU]\LOXVWUDFM ]SL FLRPDF]HUZRQ\PLLSL FLRPD
F]DUQ\PLRNU JDPL
header("Content-type: image/gif");
$rysunek = imagecreate (100,100);
108
5R]G]LDã*UDILNDZ3+3
$kolorbialy = imagecolorallocate ($rysunek, 255, 255, 255); $kolorczerwony = imagecolorallocate ($rysunek, 255, 0, 0);
$kolorczarny = imagecolorallocate ($rysunek, 0, 0, 0);
imagefill ($rysunek, 0, 0, $kolorbialy);
srand(time());
for ($i=1; $i<=5; $i++) {
imagearc ($rysunek, rand()%100-1, rand()%100-1,
20, 20, 0, 360, $kolorczerwony);
imagearc ($rysunek, rand()%100-1, rand()%100-1,
20, 20, 0, 360, $kolorczarny);
}
imagegif ($rysunek);
?>
5\VXQHN/RVRZHRNU JL
'R U\VXQNX PR*QD GRáF]Dü LQQH DOER WDNLH NWyUH V GRVW SQH DOER WZRU]RQH Z F]DVLH
G]LDáDQLDVNU\SWX
ýZLF]HQLH
1DSLV]SURJUDPNWyU\Z\ZLHWOLIRUPXODU]SR]ZDODMF\ZSLVDüOLF]E 3RMHMZSLVDQLXZ y-
ZLHWOLJUDILF]QSUH]HQWDFM ZSLVDQHMOLF]E\
/LF]E E G]LHP\NRQVWUXRZDü]SRV]F]HJyOQ\FKF\IU:NDWDORJX cyfrySU]\NáDGyZ]QDj-dziesz wszystkie cyfry w formacie GIF o rozmiarze 15x20 pikseli.
Wykorzystamy trzy nowe funkcje.
LPDJHFUHDWHIURPJLI
7ZRU]\U\VXQHNQDSRGVWDZLHMX*LVWQLHMFHJR$UJu-
mentem jest nazwa pliku. Funkcja zwraca identyfikator
utworzonego rysunku.
LPDJHFRS\UHVL]HG
.RSLXMHGRU\VXQNXRNUHORQHJRSU]H]SLHUZV]\DUJu-
ment inny –RNUHORQ\SU]H]GUXJL1DVW SQe argumenty
RNUHODMZVSyáU] GQHx i yPLHMVFDZNWyU\PQDOH*\
U\VXQHNXPLHFLüZVSyáU] GQHx i y oraz rozmiar dx i dy
ZU\VXQNXGRFHORZ\PLZLHONRüddx i ddy w rysunku
(UyGáRZHJRSR]ZDODMFHQDSU]eskalowanie).
109
3+3²þZLF]HQLDSUDNW\F]QH
LPDJHGHVWUR\
Likwiduje identyfikatorU\VXQNXMHGQRF]HQLH]ZDOQLa-
MFSDPL ü]QLP]ZL]DQ
SKS
<?
3URJUDPZ\ZLHWODIRUPXODU]SR]ZDODMF\ZSLVDüOLF]E -H*HOLOLF]ED
MHVWZSLVDQDZ\ZLHWODMZSRVWDFLJUDILF]QHM
function printliczba ($numer) {
IXQNFMDZ\ZLHWODOLF]E ZSRVWDFLJUDILNLNRU]\VWDMF]JUDILN- cyfr,
// zawartych w katalogu cyfry.
$liczbacyfr=1; $l = $numer;
while ($l >= 10) {
$liczbacyfr++;
$l=floor($l/10);
}
header("Content-type: image/gif");
$rysunek = imagecreate (15*$liczbacyfr,20);
for ($i=$liczbacyfr; $i>=1; $i--) {
$cyfra = floor($numer/pow(10,$i-1));
$numer = $numer % pow(10,$i-1);
$rysunekcyfra = imagecreatefromgif ("cyfry/$cyfra.gif"); imagecopyresized
($rysunek,$rysunekcyfra,($liczbacyfr-$i)*15,0,0,0,15,20,15,20); imagedestroy ($rysunekcyfra);
}
imagegif ($rysunek);
}
LIOLF]ED!^MHVWZSLVDQDMDNDZDUWRüZIRUPXODU]X
printliczba ($liczba);
`HOVH^QLHPDZSLVDQ\FKGDQ\FKZ\ZLHWODP\IRUPXODU]
print '<HTML>';
print ' <HEAD>';
print ' <META HTTP-EQUIV="Content-Type" CONTENT="text/html; '; print ' charset=iso-8859-2">';
print ' <TITLE>Liczba graficznie</TITLE>';
print ' </HEAD>/n';
print ' <BODY>/n';
print ' <FORM ACTION="5-05.php" METHOD=GET>/n'; print ' <INPUT TYPE="text" NAME="liczba">/n'; print ' ,13877<3( VXEPLW9$/8( :\OLM!Q
print ' </FORM>/n';
print ' </BODY>/n';
print '</HTML>/n';
}
?>
.OXF]RZURO RGJU\ZDRF]\ZLFLHIXQNFMDprintliczbaZ\ZLHWODMFJUDILF]QSUH]HQWDFM
liczby, która jest jej parametrem. Warto zaSR]QDüVL ]MHMG]LDáDQLHP
1DSRF]WNXIXQNFMDRNUHODOLF]E F\IUOLF]E\&]\QLWRSRSU]H]]OLF]DQLHLOHUD]PR*QDM
FDáNRZLFLH SRG]LHOLü SU]H] :\NRU]\VWDQD IXQNFMD floor SRGDMH FDáNRZLW F] ü OLF]E\
VWDQRZLFHMMHMSDUDPHWU
1DVW SQLHWZRU]\P\LOXVWUDFM RRGSRZLHGQLPUR]PLDU]H.D*GDF\IUDPDUR]PLDU\[
ZL F]QDMFOLF]E F\IUWZRU]\P\U\VXQHNRUR]PLDUDFK15*$liczbacyfr x 20.
110
5R]G]LDã*UDILNDZ3+3
'DOHMZS WOLGODND*GHMF\IU\QDV]HMOLF]E\SU]HSURZDG]DP\SHZQRSHUDFM =ZUyüXZDJ
MDNRNUHODP\NROHMQF\IU OLF]E\
$cyfra = floor($numer/pow(10,$i-1));
$numer = $numer % pow(10,$i-1);
3LHUZV]F\IU OLF]E\RNUHODP\G]LHOFMFDáNRZLFLHSU]H]OLF]E NWyUDRNUHODMHMU]G
QDMZL NV]SRW J OLF]E\PQLHMV]RGQLHM'RGDOV]\FKG]LDáDRGFLQDP\So prostu SLHUZV]F\IU
:DUWR ]DXZD*\ü *H Z S WOL SRMDZLD VL LQQD ]PLHQQD LGHQW\ILNXMFD U\VXQHN $rysunekcyfra.
:\QLNDWR]IDNWX*HDE\VNRSLRZDüMHGQLOXVWUDFM GRGUXJLHMPXVLV]RNUHOLüREDU\VXnki.
3R XPLHV]F]HQLX LOXVWUDFML ZH ZáDFLZ\P PLHMVFX Z GRFHORZHM JUDILFH ZDUWR M XVXQü
z SDPL FLIXQNFMimagedestroyPLPR*HZW\PSU]\SDGNXSURJUDPG]LDáDáE\WDNVDPREH]
tej funkcji).
Rysunek 5.5. /LF]EDZ\ZLHWORQDJUDILF]QLH
Do graficznej prezentacji danych nieoceniona jest funkcja, ktyUDU\VXMHZ\SHáQLRQ\SURVWoNW
LPDJHILOOHGUHFWDQJOH
5\VXMHZ\SHáQLRQ\SURVWRNW$UJXPHQWDPLVLGHQWy-
ILNDWRUU\VXQNXZVSyáU] GQH[L\OHZHJRJyUQHJRURJX
ZVSyáU] GQH[L\SUDZHJRGROQHJRURJXRUD]NRORU
ýZLF]HQLH
Napisz skrypt, który Z\SHáQLWDEOLF G]LHVL FLRPDORVRZ\PLOLF]EDPL]]DNUHVX−1DVW p-
QLH]LOXVWUXMZ\ORVRZDQHZDUWRFLQDZ\NUHVLHVáXSNRZ\P
SKS
<?
3URJUDPWZRU]\Z\NUHVVáXSNRZ\QDSRGVWDZLHG]LHZL FLRHOHPHQWRZHM
WDEOLF\]DSHáQLRQHMORVRZ\PLZDUWRFLDPLWykres jest podpisany.
srand(time());
for ($i=0; $i<10; $i++) { $liczby[$i] = rand()%10; }
header("Content-type: image/gif");
$rysunek = imagecreate (100,100);
$kolorbialy = imagecolorallocate ($rysunek, 255, 255, 255); 111
3+3²þZLF]HQLDSUDNW\F]QH
$kolorczarny = imagecolorallocate ($rysunek, 0, 0, 0);
imagefill ($rysunek, 0, 0, $kolorbialy);
for ($i=0; $i<10; $i++) {
$kolorslupka = imagecolorallocate ($rysunek, 25*$i, 25*$i, 0); imagefilledrectangle
($rysunek, $i*10+3, 90-$liczby[$i]*10, $i*10+7, 90, $kolorslupka); imagestring ($rysunek, 1, 3+$i*10, 91, $i, $kolorczarny);
}
imagegif ($rysunek);
?>
W p WOL GOD ND*GHJR HOHPHQWX WDEOLF\ RNUHODP\ NRORU VáXSND VSU\WQLH ]PLHQLDMF GZLH
VNáDGRZHNRORUXSRZRGXMHP\*HNRORUE G]LHVL ]PLHQLDáRGF]DUQHJRGR*yáWHJR
1DVW SQLHU\VXMHP\VáXSHN:VSyáU] GQxOHZHJRJyUQHJRURJXRNUHODP\Z]DOH*QRFLRG
wDUWRFL RGSRZLHGQLHM NRPyUNL WDEOLF\ ']L NL WHPX VáXSHN E G]LH PLDá Z\VRNRü X]DOH*
QLRQRGWHMZDUWRFL
2SUyF]WHJRND*G\]HVáXSNyZQXPHUXMHP\%LEOLRWHND*'SR]ZDODQDGRGDQLHWHNVWXGRXWZo-U]RQHMJUDILNLZDUWRZL FVNRU]\VWDü]WHMPR*OLZRFL3RPRFQDRND*HVL IXQNFMDimagestring.
LPDJHVWULQJ
Umieszcza tekst na rysunku. Identyfikator tekstu jest
SLHUZV]\PDUJXPHQWHP1DVW SQHWRQXPHUF]FLRQNL
ZVSyáU] GQH[L\RGNWyU\FKUR]SRF]\QDVL SLVDQLH
tekst do wypisania i jego kolor.
3RQL*V]DLOXVWUDFMDSRND]XMHG]LDáDQLHSURJUDPX
5\VXQHN3UH]HQWDFMDGDQ\FKZSRVWDFLZ\NUHVXVáXSNRZHJR
0R*HV]Z\NRU]\VWDüFHFK IRUPDWX*,)LVWZRU]\üREUD]HN]SU]HSORWHPDQJ interleaced).
6SRZRGXMHWR*HE G]LHRQZ\ZLHWODQ\X*\WNRZQLNRZL]HVWRSQLRZRURVQFUR]G]LHOF]o-
FL1DSRF]WNXX*\WNRZQLN]REDF]\U\VXQHNUR]PD]DQ\DZPLDU ZF]\W\ZDQLDE G]LH
VWDZDáDVL FRUD]EDUG]LHMZ\UD(QD']L NLWHPXX*\WNRZQLNPQLHMVL E G]LHQLHFLHUSOLZLá
podczas wczytywania rysunku.
Stosowanie przeplotu ma sens szczeJyOQLH Z SU]\SDGNX LOXVWUDFML R GX*\FK UR]PLDUDFK
:WHG\X*\WNRZQLNQDSHZQRWRGRFHQL
112
5R]G]LDã*UDILNDZ3+3
ýZLF]HQLH
1DSLV]VNU\SWNWyU\XWZRU]\GX*LOXVWUDFM RUR]PLDUDFK[=DSHáQLMMZLHORPD
Uy*QRNRORURZ\PL NZDGUDWDPL 1DU\VXM WH* OLQL L Z\SLV] MDNL WHNVW :\ZLHWO LOXVWUDFM
z przeplotem.
=DZ\ZLHWODQLHLOXVWUDFML]SU]HSORWHPMHVWRGSRZLHG]LDOQDIXQNFMDimageinterlace.
LPDJHLQWHUODFH
:VND]XMHF]\U\VXQHNRNUHORQ\SLHUZV]\PSDUDPe-
WUHPPDE\üZ\ZLHWORQ\]SU]HSORWHP-H*HOLWDNGUXJL
argument pRZLQLHQPLHüZDUWRü758(
SKS
<?
3URJUDPZ\ZLHWODXWZRU]RQSU]H]VLHELHLOXVWUDFM ]SU]HSORWHP
srand(time());
header("Content-type: image/gif");
$rysunek = imagecreate (800,600);
$kolorbialy = imagecolorallocate ($rysunek, 255, 255, 255); $kolorczarny = imagecolorallocate ($rysunek, 0, 0, 0);
imagefill ($rysunek, 0, 0, $kolorbialy);
for ($i=0; $i<250; $i++) {
$kolorprostokata = imagecolorallocate ($rysunek, rand()%256, rand()%256, rand()%256);
imagefilledrectangle ($rysunek, rand()%800, rand()%600, rand()%800, rand()%600, $kolorprostokata);
}
imagestring ($rysunek, 4, 310, 91, "To jest napis", $kolorczarny); imageline ($rysunek, 0, 0, 800, 600, $kolorczarny);
imageinterlace ($rysunek, TRUE);
imagegif ($rysunek);
?>
&HORZR XWZRU]\OLP\ WDN GX*\ U\VXQHN DE\ HIHNW E\á ZLGRF]Q\ QDZHW MH*HOL NRU]\VWDV]
z VHUZHUD:::QDZáDVQ\PNRPSXWHU]HG]L NLF]HPXX]\VNXMHV]Eá\VNDZLF]Q\WUDQVIHU
Podczas wczytywania iluVWUDFML SU]HSORW PR*QD ]DXZD*\ü ]ZáDV]F]D QD QDU\VRZDQHM OLQLL
i QDWHNFLH-HGQDNFDáNLHPGREU]HE G]LHRQZLGRF]Q\GODND*GHJRNWRE G]LHFLJDáJUa-
fiN SU]H],QWHUQHW
1LH]Z\NOHSU]\GDWQFHFKIRUPDWX*,)MHVWWR*HSHZQHMHJRIUDJPHQW\PR*QDXF]\QLü
SU]H]URF]\VW\PL ']L NL WHPX LVWQLHMH PR*OLZRü ]DPLHV]F]HQLD QD VWURQLH U\VXQNX NWyU\
VSUDZLDZUD*HQLHMDNE\SRVLDGDáNV]WDáWLQQ\QL*SURVWRNWQ\
%LEOLRWHND*'SR]ZDODZSURZDG]LüSU]H]URF]\VWRüZU\VXQNXZEDUG]RáDWZ\VSRVyE:\VWDr-czy zdefiniRZDüMHGHQ]NRORUyZMDNRSU]H]URF]\VW\–]DSRPRFIXQNFMLimagecolortransparent.
LPDJHFRORUWUDQVSDUHQW
'ODU\VXQNXRNUHORQHJRSLHUZV]\PDUJXPHQWHP
XVWDODNRORUNWyU\E G]LHSU]H]URF]\VW\VWDQRZLRQ
drugi argument).
113
3+3²þZLF]HQLDSUDNW\F]QH
ýZLF]HQLH
Napisz skrypt, NWyU\XWZRU]\LOXVWUDFM ]F]HUZRQ\PNyáNLHPQDELDá\PWOH6SUDZE\ELDá\
NRORUE\áRSU]H]URF]\VW\:\ZLHWOLOXVWUDFM QDVWURQLH+70/NWyUDSRVLDGDWáRLQQHJRQL*
ELDá\NRORUX
SKS
<?
:\ZLHWODF]HUZRQHNyáNRQDSU]H]URF]\VW\PWOH
header("Content-type: image/gif");
$rysunek = imagecreate (200,200);
$kolorbialy = imagecolorallocate ($rysunek, 255, 255, 255); $kolorczerwony = imagecolorallocate ($rysunek, 255, 0, 0);
imagefill ($rysunek, 0, 0, $kolorbialy);
imagearc ($rysunek, 100, 100, 70, 70, 0, 360, $kolorczerwony); imagefill ($rysunek, 100, 100, $kolorczerwony);
imagecolortransparent ($rysunek, $kolorbialy);
imagegif ($rysunek);
?>
Skrypt XWZRU]\F]HUZRQHNyáNRQDELDá\PWOH1LH]DXZD*\P\SU]H]URF]\VWRFLXUXFKamia-MF JR :\NRU]\VWDMP\ MHGQDN Z\QLN G]LDáDQLD VNU\SWX Z\ZLHWODMF JR QD V]DU\P WOH
w dokumencie HTML.
KWP
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2">
7,7/(!5\VXQHN]SU]H]URF]\VW\PWáHP7,7/(!
</HEAD>
<BODY BGCOLOR="#AAAAAA">
<IMG SRC="5-08.php">
</BODY>
</HTML>
0R*QD]DXZD*\ü*HGRXWZRU]RQHM]DSRPRFVNU\SWX3+3LOXVWUDFMLRGZRáXMHP\VL So-
dobnie, jak do ]Z\NáHMLOXVWUDFML
:\QLNLHPMHVWF]HUZRQHNyáNRQDV]DU\PWOHFRZLDGF]\RW\P*HXWZRU]RQ\SU]H]VNU\SW
U\VXQHNPDSU]H]URF]\VWHWáR
%DUG]RFHQQPR*OLZRFLRIHURZDQSU]H]ELEOLRWHN MHVWRGF]\WDQLHUR]PLDUyZU\VXQNX
0R*HWRVL SU]\GDüQDSU]\NáDGSU]\SLVDQLXVNU\SWXDXWRPDW\F]QLHREVáXJXMFHJRJDOHUL
]GM ü]NWyU\FKND*GHPR*HE\üLQQHMZLHONRFL
114
5R]G]LDã*UDILNDZ3+3
ýZLF]HQLH
'ODLVWQLHMFHJRU\VXQNXZ\ZLHWOJRZGRNXPHQFLH+70/DXWRPDW\F]QLHRNUHODMFMHJR
V]HURNRüLZ\VRNRüDWDN*HQDGDMF atrybuty WIDTH i HEIGHT.
5R]PLDUU\VXQNXPR*QDRNUHOLüQDGZDVSRVRE\3LHUZV]\]QLFKZ\PDJDQDMSLHUZSo-ZRáDQLD RNUHODMFHM JR ]PLHQQHM 7ZRU]F QRZ LOXVWUDFM SRVáXJLZDOLP\ VL IXQNFM
createimage:SU]\SDGNXU\VXQNXMX*LVWQLHMFHJRQDOH*\]DVWRVRZDüIXQNFM createimage-
fromgif.
FUHDWHLPDJHIURPJLI
)XQNFMD]ZUDFD]PLHQQRNUHODMF– rysunek zawarty
w pliku, którego nazwa stanowi argument funkcji.
:LHONRüLOXVWUDFMLRNUHODVL SU]\X*\FLXGZyFKIXQNFML
LPDJHVL]H[
)XQNFMD]ZUDFDV]HURNRüU\VXQNXRNUHORQHJRSU]H]
identyfikator – parametr.
LPDJHVL]H\
)XQNFMD]ZUDFDZ\VRNRüU\VXQNXRNUHORQHJRSU]H]
identyfikator – parametr.
,QQPHWRGMHVWZ\NRU]\VWDQLHEDUG]RSR*\WHF]QHMIXQNFMLgetimagesize.
JHWLPDJHVL]H
)XQNFMD]ZUDFDWDEOLF ]DZLHUDMFF]WHU\SRODV]HUo-
NRüU\VXQNXMHJRZ\VRNRüW\SRUD]áDFXFK]QDNyZ
do wykorzystania w znaczniku IMG.
:SU]\NáDG]LHVWRVXMHP\RELHPHWRG\
SKS
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2">
<TITLE>Odczytanie rozmiaru ilustracji</TITLE>
</HEAD>
<BODY>
"$SOLNDFMDGDMHQDPPR*OLZRüRGF]\WXNDVRZDQLDGRGDZDQLD
// i poprawy danych w bazie.
$nazwarysunku = "bannery/1.gif";
$rysunek = imagecreatefromgif ($nazwarysunku);
SULQW 6]HURNRüU\VXQNX%! LPDJHV[U\VXQHN
SULQW %!Z\VRNRüU\VXQNX%! LPDJHV\U\VXQHN %!%5!
$wh = getimagesize ($nazwarysunku);
print "<IMG SRC=\"$nazwarysunku\" $wh[3]>";
?>
</BODY>
</HTML>
6NU\SWZ\SLVXMHNRGZ\ZLHWODMF\U\VXQHN]DSRPRF]QDF]QLND<IMG>:DUWRFLDWUybu-tów WIDTH i HEIGHTGODyZF]HQLHRGF]\WDQHJRU\VXQNXVRNUHODQHRGSRZLHGQLPLIXQk-115
3+3²þZLF]HQLDSUDNW\F]QH
FMDPL : QDV]\P SU]\SDGNX SRVáXJXMHP\ VL EDQQHUHP NWyU\ ]QDMGXMH VL Z SOLNX
z pr]\Náadami.
:\ZLHWODP\WH*WHNVWRZLQIRUPDFM RV]HURNRFLLZ\VRNRFLU\VXQNX
3+3GDMHPR*OLZRüSU]HVNDORZDQLDU\VXQNXRGSRZLDGD]DWRSR]QDQDMX*IXQNFMDimgcopy-fromgif1DOH*\MHGQDN]GDZDüVRELHVSUDZ *HMDNRüWHJRSU]HVNDORZDQLDMHVWQL*V]DQL*
JG\E\ ]RVWDáR GRNRQDQH ]D SRPRF GREUHJR SURJUDPX JUDILF]QHJR %\ü PR*H FKFLDáE\
Z\NRU]\VW\ZDüZVZRLPVHUZLVLHMHGQLOXVWUDFM ZNLONXUy*Q\FKUR]PLDUDFKLPDV]]a-
PLDUSU]HFKRZ\ZDüQDVHUZHU]HW\ONRQDMZL NV]DPQLHMV]HWZRU]\üSU]\X*\FLXVNU\SWu
3+3:DUWRVL ]DVWDQRZLüF]\QLHOHSLHM]DPLHFLüMMHGQDNQDVHUZHU]HZND*GHM]So-WU]HEQ\FK ZLHONRFL SR SU]HNV]WDáFHQLX ]D SRPRF SURJUDPX JUDILF]QHJR =DSHZQL WR
]QDF]QLHZ\*V]MDNRüLOXVWUaFMLSU]\VSLHV]\Z\ZLHWODQLHLRGFL*\VHUZHU
ýZLF]HQLH
1DSLV]VNU\SWNWyU\SU]HVNDORZXMHLOXVWUDFM 3RUyZQDMMDNRüWDNLHMLOXVWUDFML]SU]HVNDO o-
ZDQ]DSRP o FSURJUDPXJUDILF]QHJR
6SUyEXMHP\]PLHQLüUR]PLDUMHGQHM]RNáDGHNNVL*HN2U\JLQDá]QDMGXMHVL ZNDWDORJX img
SU]\NáDGyZ 7DP WDN*H RGQDMG]LHV] LOXVWUDFM ]PQLHMV]RQ ]D SRPRF SURJUDPX &RUHO
PHOTO-PAINT.
3RQL*V]\VNU\SWRGF]\WXMHMX*LVWQLHMFLOXVWUDFM LNRSLXMHMGRWHMQRZRXWZRU]RQHMSR
pomniejszeniu).
SKS
<?
3URJUDPSU]HVNDORZXMHLOXVWUDFM ][QD[.
header("Content-type: image/gif");
$rysunek = imagecreate (72,93);
$rysunekprzeksztalcany = imagecreatefromgif ("img/ph6bib.gif"); imagecopyresized
($rysunek,$rysunekprzeksztalcany,0,0,0,0,72,93,181,236);
imagedestroy ($rysunekprzeksztalcany);
imagegif ($rysunek);
?>
8WZRU]\P\ WDN*H GRNXPHQW +70/ NWyU\ Z\ZLHWOL ZV]\VWNLH LOXVWUDFMH Z\MFLRZ So-PQLHMV]RQ]DSRPRF3+3LSU]\]DVWRVRZDQLXSURJUDPX&RUHO3+272-PAINT.
KWP
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2">
<TITLE>Rysunek przeskalowany przez PHP i programem CorelDraw</TITLE>
</HEAD>
<BODY BGCOLOR="#AAAAAA">
<TABLE>
<TR><TD COLSPAN=2 ALIGN=CENTER><IMG SRC="img/ph6bib.gif"></TD></TR>
<TR><TD COLSPAN=2 ALIGN=CENTER>Rysunek oryginalny<P></TD></TR>
<TR><TD ALIGN=CENTER><IMG SRC="5-10.php"></TD>
<TD ALIGN=CENTER><IMG SRC="img/ph6bib-corel.gif"></TD></TR>
<TR><TD ALIGN=CENTER>PHP</TD><TD ALIGN=CENTER>Corel</TD></TR> 116
5R]G]LDã*UDILNDZ3+3
</TABLE>
</BODY>
</HTML>
1LHWUXGQR]DXZD*\ü*HMDNRüSUDZHMLOXVWUDFMLMHVW]QDF]QLHOHSV]DQL*OHZHM
1LH]QDF]\WR*HZRJyOHQLHSRZLQQRVL ]PLHQLDüUR]PLDUyZ]DSRPRF3+3:DUWRMHd-
QDNSRGFKRG]LüGRWHJREDUG]RUR]ZD*QLH
Funkcja imagegif D WDN*H imagejpg) zapewnia jeV]F]H MHGQ FLHNDZPR*OLZRü 5\VXQHN –
]DPLDVW]RVWDüZ\ZLHWORQ\–PR*H]RVWDü]DSLVDQ\ZRGSRZLHGQLPIRUPDFLH:\VWDUF]\
SRGDüPXGUXJLGRNXPHQW–QD]Z SOLNX
ýZLF]HQLH
:\NRU]\VWDMSURJUDP]üZLF]HQLDL]DSLV]XWZRU]RQ\SU]H]QLHJRZ\NUH s w pliku teksto-wym.
:\NRU]\VWDP\PR*OLZRüMDNGDMHQDPIXQNFMDimagegif.
SKS
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2">
<TITLE>Zapis rysunku do pliku</TITLE>
</HEAD>
<BODY>
<?
// PURJUDPWZRU]\Z\NUHVVáXSNRZ\QDSRGVWDZLHG]LHZL FLRHOHPHQWRZHM
WDEOLF\]DSHáQLRQHMORVRZ\PLZDUWRFLDPL:\NUHVMHVWSRGSLVDQ\
// Utworzona ilustracja zostaje zapisana do pliku rys.gif.
srand(time());
for ($i=0; $i<10; $i++) {
$liczby[$i] = rand()%10;
}
$rysunek = imagecreate (100,100);
$kolorbialy = imagecolorallocate ($rysunek, 255, 255, 255); $kolorczarny = imagecolorallocate ($rysunek, 0, 0, 0);
imagefill ($rysunek, 0, 0, $kolorbialy);
for ($i=0; $i<10; $i++) {
$kolorslupka = imagecolorallocate ($rysunek, 25*$i, 25*$i, 0); imagefilledrectangle
($rysunek, $i*10+3, 90-$liczby[$i]*10, $i*10+7, 90, $kolorslupka); imagestring ($rysunek, 1, 3+$i*10, 91, $i, $kolorczarny);
}
imagegif ($rysunek, 'img/rys.gif');
?>
3!5\VXQHN]RVWDá]DSLVDQ\GRSOLNX3!
</BODY>
</HTML>
117
3+3²þZLF]HQLDSUDNW\F]QH
:SU]\SDGNXJG\VHUZHUG]LDáDZURGRZLVNX:LQGRZVQLHSRMDZLVL *DGQHSUREOHP\
6SUDZG(XWZRU]RQ\SOLNZF]\WDMJRGRSURJUDPXJUDILF]QHJRE\]REDF]\ü*HMHVWWRU]e-F]\ZLFLHLOXVWUDFMD
-H*HOL VHUZHU G]LDáD Z V\VWHPLH /LQX[ PXVLV] SDPL WDü *H tworzenie pliku graficznego
ZL*H VL ] LGHQW\F]Q\PL ]DVWU]H*HQLDPL MDN w przypadku innych =RVWDáR WR Z\MDQLRQH
w rozdziale 4. Katalog, w którym tworzysz plik,PXVLSRVLDGDüRGSRZLHGQLHSUDZD– do za-pisu, dODWHJRGREU]HMHVWXWZRU]\üGRSU]HFKRZ\ZDQLDLQQ\ katalogQL*WHQZNWyU\PSU]e-chowujesz dokumenty PHP.
5\VXQNLWZRU]RQHSRVWURQLHVHUZHUDPRJE\üEDUG]RFHQQ\PVSRVREHPSUH]HQWDFMLUy*Qe-go rodzaju dynamiczn\FKGDQ\FKQDVWURQLH0XVLV]MHGQDNSDPL WDü*HLFKWZRU]HQLHRb-
FL*DVHUZHU, dODWHJRSRZLQLHQHUR]ZD*\üMDNF] VWRGDQHXOHJDM]PLDQLH-H*HOLQDSU]y-
NáDGE G]LHV]SUH]HQWRZDáZ\NUHV\FHQZDOXW\]PLHQLDMFHVL UD]G]LHQQLHQLHPDVHQVX
ND*GRUD]RZR WZRU]\üLOXVWUDFMLQDSRGVWDZLHGDQ\FK]ED]\0R*QDNRU]\VWDMF]PR*liwo-
FLELEOLRWHNL*',Z\JHQHURZDüMHUD]QDG]LHLZ\ZLHWODüX*\WNRZQLNRPSU]ygotowany SOLN-H*HOLMHGQDNLOXVWUDFMHVprzygotowywane QDSRGVWDZLHGDQ\FKZ\QLNá\FK] komu-nikacji ]X*\WNRZQLNLHPQLHPDZ\MFLDWU]HEDWZRU]\üLOXVWUDFM ]DND*G\PUazem.
:DUWRUyZQLH*SDPL WDü*HGREUDLOXVWUDFMDutworzona przez profesjonalnego grafika w do-brym proJUDPLHJUDILF]Q\PQDSHZQRE G]LHOHSV]DQL*przygotowana ]DSRPRFVNU\SWX
w PHP. 1DOH*DáRE\ZL FUDF]HMRGU]XFLü (chyba*HQLHPDLQQHMPR*OLZRFLSRP\Vá\Wypu: twoU]HQLH]DSRPRF3+3SU]\FLVNyZJUDILF]Q\FK]RNUHORQ\PWHNVWHPF]\JHQHURZanie loVRZHJRWáD:\NoU]\VWDMELEOLRWHN *'LHNVSORDWXMVZyMVHUZHUWDPJG]LHMHVWWRX]asad-
nione.
-H*HOL]QDMG]LHV]ÄJRWRZFH´ZSRVWDFLSURFHGXUWZRU]F\FKLOXVWUDFMHQDSLVDQ\FKZM ]\NX
C lub w Perlu, z wykorzystaniem biblioteki GD NWyUD MHVW GOD QLFK WDN*H GRVW SQD EH]
proEOHPXSRUDG]LV]VRELH]LFKSU]HNRQZHUWRZDQLHPGR3+30HWRGRORJLDG]LDáDQLDDQa-wet nD]Z\IXQNFMLVEDUG]RSRGREQH:SURJUDPLHQDSLVDQ\PZM ]\NX&bLEOLRWHN *'
zidentyfikujesz po wierszu:
#include "gd.h"
a w programie napisanym w Perlu po wierszu:
use GD;
Katalog skryptów przeznaczonych do generowania grafiki – z wykorzystaniem biblioteki GD –
znajdXMH VL na stronie http://php.resourceindex.com/Complete_Scripts/Images_and_Graphs/.
Katalog ciJOHVL UR]ZLMDDOHtymczasem nie jest zbyt bogaty. 0R*QDtam jednak RGV]XNDü
na przyNáDGGDUPRZ\VNU\SWNWóry tworzy kod kreskowy na podstawie podanej liczby.
118