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