PHP.ee
 php.ee   linuxator.com   whee 
06.09.10 / 21:15
  Artiklid
  » Algajaile
  » Andmebaasid
  » Varia
  » Graafika
  » Advanced
Logi sisse:
< nimi
< pass
Unustasid passi?
Kas eelistad võimalusel PHP koodi objektorienteeritult kirjutada?
 Jah, see teeb töö lihtsamaks
 Jah, see on lihtsalt lahe
 Nii ja naa, ei tunne erilist võitu
 Ei, mõttetu ajakulu
 Ei oska objektorienteeritult progeda
Tulemused
PHP ja pildid
Heikko Ellermaa

Php pole niisiis kõigest dünaamilise teksti loomiseks, vaid sellega võib
vabalt ka dünaamiliselt pilte teha. Selleks on vajalik "gd" mooduli
lisamine php-sse. Php GD on niisiis graafikamoodul, sõltub süsteemsest gd
library'st ja pakub kasutada kõiki image_* funktsioone. Sellest kuidas
mooduleid kompileerida või lisada siin juttu ei tule. Lühidalt kui
phpinfo() annab mingit infot GD kohta, siis on see alustuseks päris hea.

Võimalikud pildifailitüübid on hetkel jpg ja png. Vanema gd puhul on
võimalik ka gif'i kasutamine, kuid alates mingist versioonist pole see
enam gd osa. Gifi asemel on soovitatav kasutada png failiformaati.

Asja juurde. Oletame et tahetakse luua uut pilti. Selleks on ImageCreate()
nimeline funktsioon.

PHP kood:


 
<?php
//1
        
$im ImageCreate (50100);    
//2
        
$background ImageColorAllocate ($im255255255);
//3
        
$text_color ImageColorAllocate ($im2331491);
//4
        
ImageFillToBorder ($im00$background$background);
//5
        
ImageString ($im155,  "Näitlik asi"$text_color); 
//6    
        
header ("Content-type: image/png");
//7
        
ImagePng ($im);
?>


See on nüüd enamvähem üksühele php manuaalist maha pandud. Ärge kandke
viha :) Aga mis siin siis toimub ikkagi? Kõigepealt tekitame uue pildi
objekti, mis säilitakse $im muutujas. Parameetriteks on pildi suurus.
Pildi võib luua ka olemasolevast pildifailist, selleks on
ImageCreateFrom*() funktsioonid erinevate failitüüpide jaoks.

Siis paneme paika värvid real 1 ja 2. Nende määramine toimub
ImageColorAllocate() abil, mille parameetritekse on pildi objekt ja RGB
toonid kümnendsüsteemi täisarvudena. Mõnes mõttes on see tüütu, kui
inimesed veebis tavaliselt kasutavad 16nd süsteemi esitust RGB värvidest
(see on siis näuiteks valge puhul "FFFFFF"). Edaspidi tuleb ka pisike
funktsioon, mis neid teisendab.

Edasi täidetakse pildi taust taustavärviga (rida 4), selleks sai kasutatud
ImageFillToBorder funktsiooni. Kuna taustavärvi veel kusagil varem pole
siis täitab ta pildi algusest lõpuni. Parameetriteks olevaid koordinaate
loetakse ülevalt vasakust nurgast. Ehk siis seal on punk (0,0) ja all
paremas on (max,max), meie näite puhul (50,100).

Järgmine asi on teksti väljastamine (rida 5). Enamikul juhtudel on hea
lihtne kasutada standardset fonti, mille suurus on ImageString funktsiooni
teine argument. Suurused saavad olla 1-st 5-ni, mis tähistavad
standardseid fonte, suurem number tähendab suuremat fonti. Kui on soov
kasutada oma fonte, siis tasuks uurida ImageTTFText() funktsiooni või siis
ImagePS...() funktsioone. Esimene neist on TrueType fontide ning teised
PostScript fontide kasutamiseks.

Nüüd oleme pildiga nii kaugel, et seda võiks juba vaadata. Selleks
väljastame kõigepealt HTML päise, funktsiooni header() abil. Kavatsen
väljastada png pildi, niisiis on selleks päiseks: "Content-type:
image/png"
, jpg puhul oleks tegemist "Content-type: image/jpeg" ja gif'i
puhul "Content-type: image/gif". Tegemist on standardsete 'mime' päistega,
mille järgi brauser vaatab, mis tüüpi failiga on tegemist. Kasulik on see
päis väljastada vahetult enne pildi enda väljastamist (see on siis siin
näites ImagePng() funkstiooni). See annab meile võimaluse php poolt
väljastatud võimalikke veateateid brauseris näha. Juhul kui me teeks seda
esimese asjana oma scriptis, siis saaksime vaid katkise pildi ikooni.

Ja viimane asi ongi vastavat tüüpi pildi väljastamine ImagePng()
funktsiooni abil (rida 7). Iga pilditüübi jaoks on oma funktsioon, uuri
lisa php manuaalist. http://ee.php.net/manual/en/ref.image.php

See on alustuseks kõik. Nüüd siis lubatud funktsioon värvide töötluseks:

PHP kood:


 
function rgb2Array($rgbstr) {
        
$ar=array();
        
$ar["r"]=hexdec(substr($rgbstr,0,2));
        
$ar["g"]=hexdec(substr($rgbstr,-4,2));
        
$ar["b"]=hexdec(substr($rgbstr,-2));
        return 
$ar;
}


See võtab parameetriks "FFFFCC" stiilis stringe ja väljastab array, mida
saab kasutada näiteks nii:

PHP kood:


 
$arr 
rgb2Array("FFCCFF");

ImageColorAllocate($image$arr[0], $arr[1], $arr[2]);



Eks otsustage ise, kas teil on nii mugavam.

Nüüd veidi üldist juttu ka. Piltide loomine php abil võib olla kasulik
mitmeti. Te võite lisada oma olemasolevale pildile suvalist teksti, võite
väljastada lehekülje külastajate loenduri pildina jne. Igasuguste
nupukeste loomine võib toimuda php abil, sealhulgas ka näiteks mõne tabeli
ümmarguste nurkade tegemine (ImageArc() funtsioon on vihje). Loomulikult
pole php abil piltide joonistamine pooltki nii mugav kui näiteks
PhotoShopiga, kuid tulemus võib olla väga dünaamiline ning lõpuks on teil
üks skript, mis joonistab erinevaid pilte, mitte suur hunnik pisikesi
pildifaile, mida te peate iga värvitooni muutuse jaoks uuesti sellesama
Photoshopiga näiteks tegema. (Asenda PhotoShop eelenenud tekstis oma lemmiku pildiloomis/töötlus programmiga.)

Samm edasi võiks olla näiteks graafikute joonistamine, kui netist otsida
siis võite mõne vabaltkasutatava graafikujoonistamise skripti peale
sattuda. Loomulikult tuleks siis kasuks ka laiem kogemus programmeerimise
alal. Ja tubli tükk matemaatikaoskust ka :). Ma ei soovita ära unustada,
et ka pildifunktsioone php's saab kasutada erinevate funktsioonide ja
klasside sees, olenemata sellest, et siintoodud näide oli väga lihtne.

Kui on ettepanekuid, küsimusi, vigasid siin tekstis, siis andke teada:
eiku@struktuur.ee. Samasse kohta võib saata ka ettepanekuid ja teemasid,
millest piltide loomise/muutmise kohta veel kirjutada.

Artikli kommentaarid

O