Lecții Php (bazate pe materiale pe forum)

Lecția numărul 12 - GD - lucrează cu imagini.

Posibilitățile PHP nu se limitează la crearea HTML # "I. PHP poate fi folosit pentru a crea și manipula imagini de diverse formate, inclusiv gif, png, jpg, wbmp și xpm. În plus, PHP poate transmite fluxul de imagini direct în browser. Pentru lucru, aveți nevoie de PHP compilat cu biblioteca grafică GD. GD și PHP pot depinde de alte biblioteci, în funcție de tipul de formate de imagine cu care veți lucra.







Cu extensia EXIF, puteți procesa informațiile stocate în anteturile imaginilor JPEG și TIFF. Cu aceasta puteți accesa meta-tagurile generate de camerele digitale. Pentru a lucra cu extensii EXIF, biblioteca GD nu este necesară.

Puteți citi în documentația oficială despre instalarea și configurarea bibliotecii. Cel mai probabil nu veți avea nevoie de acest lucru deoarece ați fost instalați cu toții de mult timp.

Există multe funcții ale acestora, și toate acestea sunt importante. Nu voi descrie fiecare dintre ele, cu atât este mai bine decât documentația oficială pentru mine să nu o fac. Dar vom putea să le privim cu exemple și acum o vom face.

Prima noastră stație este imagecreatetruecolor.
Documentația spune Creați un nou image.Ya adevărat culoare sigur că v-ați gândit întotdeauna că culorile nu sunt prezente, nu pot fi, și eu cred că acest lucru încă =) Adevărata culoare este de fapt numele, prezentarea și stocarea imaginilor, poate afișa mare numărul de culori, halteturi și nuanțe în format RGB. Permiteți-mi să vă reamintesc că reprezentarea RGB de la Red Green Blue este o modalitate de a exprima orice culoare cu ajutorul a trei culori de bază.

resursă imaginecreatetruecolor (int $ lățime int $ height)
Funcția noastră are două argumente întregi. Lungimea și lățimea imaginii noi. Dacă ați ghicit să vă răsuciți după deschiderea documentației, ați văzut că rezultatul acestei funcții în exemplul lor a fost o cutie neagră. Faptul că cutia era neagră, nu trebuia să te sperii deloc.
Dacă doriți un pătrat de altă culoare, va trebui să încercați următoarea noastră funcție în acest caz, după un alt cuvânt despre asta.

Funcția rezultat returnează un tip de date bazat pe resurse.
Înseamnă că mai lucrăm direct cu ceva în memorie.

Apoi, trecem acest identificator la un alt colorallocate imaginii funcției
Funcția generează reprezentări de culoare în forma în care este utilizată în imagine, pentru a lucra în continuare cu această culoare în imagine.
Primul apel la această funcție stabilește fundalul imaginii.

int imagecolorallocate (resursă $ image .int $ roșu .int $ green .int $ albastru)
Stim cei trei parametri. Numerele de la 0 la 255 exprimă culoarea din sistemul RGB.
Pentru negru avem nevoie de trei ori 0, pentru alb de trei ori 255.
Primul parametru al funcției imagine $ resursă este același identificator pe care l-am primit mai devreme în imagecreatetruecolor. Acest parametru este necesar pentru ca reprezentarea culorilor să corespundă cerințelor formatului imaginii.

Și astfel, a creat imaginea, a pregătit paleta, este timpul să începem procesul creativ. Linia de imagini
După cum implică principiul, funcția trage o linie în imagine.
Nu vom intra în detalii, cum se întâmplă acest lucru, nu vom. Pur și simplu tragem o linie.

// creați o imagine 100 * 100
$ img = imaginecreatetruecolor (100. 100);

// alocați unele culori
$ red = imagecolorallocate ($ img. 255. 0. 0);
$ green = imagecolorallocate ($ img. 0,255. 0);
$ blue = imagecolorallocate ($ img 0. 0. 255);

/ / trageți câteva linii
Imagine ($ img 40. 30. 40. 40. $ verde);
Imagine ($ img 50. 30. 50. 40. $ verde);
imagine ($ 45. 38. 45. 39. $ verde);

Imagine ($ 37. 45. 53. 45. $ verde);
imagine ($ 37. 43. 37. 45. $ verde);
imagine ($ img 53. 43. 53. 45. $ verde);

// afișați imaginea în browser
header ("Tip de conținut: imagine / png");






imagepng ($ img);

// memorie liberă
imagedestroy ($ img);
?>

Despre ieșirea imaginii în browser și despre curățarea memoriei, vom vorbi mai târziu, dar pentru moment, să vedem cu ce lucrează imaginea.

bool imageline (resursă $ imagine, int $ x1, int $ y1, int $ x2, int $ y2, int $ culoare)
Că există ceva ce vă puteți ghici singur sau căutați prin documentație. Există.
Vreau să nu vă fie frică să faceți ceva greșit. Uită-te la documentație și mergi mai departe.
Încă o dată vă voi spune - dacă nu funcționează nimic, puteți pune întotdeauna o întrebare pe forum =)

Funcția funcționează cu un pointer pentru imaginea din memorie creată de imageCreateTrueColor și cu identificatorul de culoare creat de imageColorAllocate. Nu este nimic complicat? În mod similar, majoritatea funcțiilor de imagine funcționează. Este nevoie de un pointer pentru imagine, culoare și unele dintre argumentele sale specifice.

Vei avea timp să-ți practice problemele. Apoi vom analiza câteva funcții cheie pentru a lucra cu imagini pe exemple pentru a vă oferi încredere în lucrul cu ele =)

Și acum, cu cuvinte simple și în limba rusă:
Luăm resursa imaginii sursă $ src_image. am scos din el un dreptunghi al cărui colț stânga sus se află la punctul int $ src_x. int $ src_y și înălțimea și lățimea int $ src_w. int $ src_h. Este totul simplu?
Și acum acest dreptunghi cu imaginea este comprimat, întins, conic, extins astfel încât noua lungime și lățime să corespundă cu int $ dst_w. int $ dst_h.
Apoi, acest dreptunghi nou este introdus în noua imagine la punctul int $ dst_x. int $ dst_y.
Veți avea ocazia să încercați acest miracol în acțiune, puțin mai aproape de sfârșit.

imagecreatefromgif
Această funcție sau similitudinea pe care o veți utiliza adesea atunci când lucrați cu imagini. Funcția este simplă ca o rake. Dați-i numele dosarului, vă oferă un indicator al unei imagini în memorie cu care puteți lucra.
Fiți atenți la această creație de la. Există și alte formate și pentru ele există deja alte funcții. De exemplu, creăm imaginea de la imagine sau creăm imaginea de la imagine.

Când browserul ne arată un fel de imagine, el solicită, în esență, aceeași scrawl de la server și le transformă pe ecran într-o imagine.
Deci, nu numai că putem salva aceste scraperii într-un fișier, dar, de asemenea, le trimitem direct browserului. Are aceeași imaginegif, dar de data aceasta fără al doilea parametru.
imagegif ($ im)

În sfârșit, ultimul lucru pe care l-ați întâlnit aici este imagedestroy
Indicatorul $ img variabil nu se șterge, dar memoria la care variabila indică faptul că acesta purifică. Este util dacă doriți să lucrați cu imagini de o rezoluție mare, de exemplu, cu mai multe imagini în paralel și să nu depășiți limitele de memorie liberă permisă.

Permiteți-mi să vă reamintesc că toată memoria alocată scriptului la momentul executării este eliberată automat odată cu finalizarea lucrărilor.

Ei bine, asta e tot, am învățat baza teoretică.

Eroare fatală: Apelați la funcția nedefinită.
Aceasta înseamnă că nu aveți instalată biblioteca GD sau totul este mult mai simplu - sunteți sigilați în numele funcției. Instalarea GD este descrisă în documentație. În Denver, în mod implicit, în ubuntu este posibil să aveți nevoie de comanda sudo apt-get install php5-gd și să reporniți serverul.

Avertisment: imagecreatefrom .. (a.png) nu a reușit să deschidă fluxul: Permisiunea a fost refuzată
tot aici este simplu. Faceți clic dreapta pe imaginea noastră și setați dreptul de a citi tuturor.

Ecranul afișează ID-ul resursei # în loc de imagine.
= (Am spus deja că de ieșire la browser-ul se realizează prin intermediul unor funcții speciale de forma imagegif () fără un parametru al doilea pe care o în cazul în care ar trebui să echo $ img ;. și afișează conținutul memoriei nu sunt, ci pur și simplu un mesaj care este un pointer.

Avertizare. (): argumentul furnizat nu este o resursă validă a imaginii
Așteptând pointerul și apoi ce i-ați dat unui șir sau altceva. Și dacă sunteți sigur că treceți pointerul, dar totuși obțineți această eroare, nu mai lipiți. Vă înșelați și verificați mai bine totul. Va salva o mulțime de nervi =)

# 65533; PNG? # 65533; # 65533; # 65533; I 65533; ; # 65533; # 65533; # 65533; J A # 65533 ;? # 65533; Mv # 65533; M4 # 65533; # 65533;
Da, de ce este imaginea de ieșire a codului binar și browserul nu a crezut să facă o imagine din ea, dar a procesat-o ca text simplu. Ei bine, întoarceți întreaga lecție și căutați partea în care am trimis imaginea în browser.

O serie de sarcini pentru a stăpâni materialul

Vă voi reaminti din nou etapele programării
1. Afirmația problemei
2. Definirea operațiunilor necesare
3. Selectarea funcțiilor potrivite pentru fiecare operațiune (de aceea)
4. Construirea unui lanț
5. Debugging cu revenirea la primul element

1. Imprimarea suprapunerii
Sigur că voi adăuga câteva cuvinte în imaginea pe care nu o aveți. Deci, să încercăm să desenați o semnătură grafică. Deschideți vopseaua și creați-vă propriul autograf. Sa dovedit? Excelent.
Acum salvăm două imagini ale lui Pamela Anderson de la Google și le atașăm.
(Sugestie: probabil util să se știe că imaginea are un parametru numit Alpha - care desemnează transparența este asigurată Ctrl + F pe o listă de funcții pe care le va arunca în ochi, deși nu este necesar.).

2. Captcha
Nu vom face complicate, vom face unul simplu. De fiecare dată, sunt extrase patru cifre aleatorii.
Care este captura? Pentru aceasta vom folosi un font special - îl puteți descărca aici. Și chiar după ce imaginea noastră este albă, cu un text negru. vom aplica un filtru negativ pe acesta și pe ecran, îl vom arăta invers, cu un fundal negru și o culoare albă, iar ambele imagini vor fi afișate pe ecran (și toate într-un script)

3. Sigla php
Această sarcină este mai simplă și mai autentică - desenează un logo php.

Răspunsurile la aceste întrebări pot fi găsite aici: aici







Articole similare

Trimiteți-le prietenilor: