intrare
În această etapă a dezvoltării, PHP oferă programatorilor o gamă largă de funcții pentru generarea dinamică a imaginilor și lucrul cu ei. În acest articol voi arăta metoda de creare a unei clase care va pune filigran pe aceste imagini. Această clasă va funcționa cu două imagini: imaginea originală și filigranul. Ca o completare, este introdus un al treilea parametru - clasa noastră va conține o variabilă alfa. Acest lucru ne va permite să folosim canalul alfa pentru filigranul nostru.
Informațiile din canalul alfa reprezintă cel mai adesea zonele selectate - unele forme sau locații ale zonelor de culori. Salvarea canalului alfa în imagine mărește dimensiunea fișierului cu 1/3. Imaginile RGB pot avea până la 24 canale alfa. Punctul și imaginile indexate nu pot conține canale alfa.
Prima parte - elementele de bază
Înainte de a începe să scrieți clasa însăși, să analizăm funcțiile care vor fi utilizate în ea. Aici este lista lor:
După cum puteți vedea, php dispune de suficiente funcții pentru a lucra cu grafica. Permiteți numirea unora dintre ele nu este absolut clară în teorie, dar în practică totul este mult mai simplu. Prin urmare, pentru a înțelege cum să lucrăm cu ei, le vom aplica în clasa noastră.
Selectarea căii spre obiectiv
Acum, când am decis deja cu privire la scopul "mini-proiectului" nostru, vom reveni puțin și vom vorbi despre modalitățile de implementare a acestuia.
Pentru început, aplicația noastră primește două imagini - imaginea originală și inscripția în sine. Apoi, trebuie să determinăm dimensiunile acestor imagini (lățime-lățime și înălțime-înălțime). Aceste date sunt necesare pentru amplasarea filigranului în centrul imaginii (presupunând că dimensiunea filigranului este mai mică decât cifra însăși).
Apoi va fi necesar să ne impunem filigranul pe imaginea originală. Pentru a face acest lucru, trebuie să adăugăm culorile (matematic) ale imaginilor suprapuse pentru a obține a treia.
Și în final, va trebui să afișăm imaginea rezultată în browser. În acest caz, desenul se va deschide direct din sursa specificată în secțiunea ""
Cred că există suficiente teorii deja - momentele cheie din ea sunt dezvăluite suficient de detaliat. Acum mergeți direct la scrierea scenariului.
Partea a doua - scriem un scenariu
Să începem cu cele mai simple - să scriem o clasă care creează un fișier cu un filigran. Să o numim "filigran" și să îi atribuim codul în fișierul "api.watermark.php". Clasa "schelet" va avea trei funcții:
Următorul pas este să scrieți codul pentru funcțiile clasei "watermark". Completăm fișierul "api.watermark.php" cu următoarele rânduri de cod:
Acum, să aruncăm o privire mai atentă la funcția create_watermark ().
Mai întâi, trecem la el trei parametri:
(Este important să rețineți că funcția noastră ia imagini ca obiecte, nu doar ca niște căi spre ele - dar acest lucru va fi discutat puțin mai târziu)
Apoi, trebuie să obținem informații despre fiecare dintre aceste imagini. Trebuie să știm coordonatele X și Y pentru locația filigranului din centrul imaginii originale.
Următorul pas este să creați o imagine nouă și colorată cu aceleași dimensiuni ca imaginea originală. Această imagine (variabila $ return_img) va fi utilizată pentru a combina informațiile din imaginile sursă (imagine și filigran).
Finalul este afișarea imaginii noastre modificate în pagina web care o cere. Apoi, luați în considerare celelalte două funcții auxiliare.
Partea a treia - funcții auxiliare
În plus față de funcția create_watermark în clasa noastră de filigran există alte două funcții. Să continuăm codul sursă al clasei cu următoarele rânduri:
Și acum mai mult. Prima noastră funcție "_get_ave_color" are valori numerice de două culori și un canal alfa. Returnează valoarea medie. Această funcție este necesară pentru a determina culoarea care va fi obținută prin suprapunerea pixelilor celor două figuri.
A doua funcție „_get_image_color“ sparge imaginea în roșu (roșu), verde (verde) și componentele albastru (albastru) (RGB-paleta). Cu construit în funcții PHP pentru grafica (descrierea lor a fost la începutul articolului), obținem cea mai apropiată valoare de culoare pentru noua imagine.
În plus, mai multe lucruri sunt verificate. În primul rând, dacă a fost posibilă obținerea valorii exacte (variabila $ c), atunci ea revine din funcție (retur $ c). În caz contrar, se face o încercare de a selecta o culoare utilizând funcția imagecolorallocate (). Dacă acest lucru nu ajută la obținerea rezultatului, apoi folosind funcția imagecolorclosest (), valoarea cea mai apropiată de culoare (cea mai inexactă) este pur și simplu returnată.
În primul rând, scriptul nostru efectuează ocolirea imaginii cu două bucle "for". În paralel, coordonatele fiecărui pixel al filigranului sunt de asemenea numărate.
Apoi, căutați informații despre RGB pentru fiecare pixel. Dacă pixelul curent nu se află în intersecția imaginii originale și a filigranului, clasa noastră doar duplică pixelul pentru noua imagine. Dacă pixelul este situat în zona de intersecție, trebuie să determinăm culoarea acestuia ca urmare a suprapunerii imaginii originale și a filigranului.
Pentru a determina culoarea regiunii intersecție, în primul rând aveți nevoie pentru a obține valoarea unei variabile RGB-filigran, utilizând informațiile pe care le-am primit în „pentru“ bucle. Apoi, folosind funcția „_get_ave_color“ este determinată de valoarea medie de culoare pentru noua imagine. Următoarea funcție „_get_image_color“ pentru a determina gama de culori, care va fi utilizată funcția „return_img“.
În final, după sfârșitul ciclului "pentru", avem o imagine gata făcută cu un filigran.
Și acum ne vom verifica clasa în acest caz.
Partea a patra - Test Drive
Mai întâi avem nevoie de două fișiere. Mai întâi, apelați "watermark_test.php" și puneți în el următorul cod:
Etotgo fișier destinație este foarte simplu: afișează browser-ul original (main.jpg) și a primit (watermark.png, filigranată) imagine.
Al doilea fișier se numește "image.php" și vom plasa următorul cod în el:
Am ajuns la finala.
Pentru cei care doresc să obțină mai multe informații despre crearea de imagini în formate populare, dau mai multe linkuri:
Pentru a testa scriptul nostru, trebuie doar să rulați fișierul "watermark_test.php" în browser. Ca urmare, trebuie să existe două imagini - cel original și filigranul.
Total voturi: 10; Scor general: 4.8 Vot: