Crearea de filigrane cu php

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.







Pentru referință

Informațiile din canalul alfa reprezintă cel mai adesea zonele selectate - unele forme sau locații ale zonelor de culoare. 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. Lăsarea numirii 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 localizarea filigranului din 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 de toate, 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ă la 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ți reușit să obțineți valoarea exactă (variabila $ c), atunci este returnat de funcția ($ retur c). În caz contrar, se face o încercare de a selecta o culoare utilizând funcția imagecolorallocate (). În cazul în care nu contribuie la atingerea rezultatului, cu funcția de ajutor imagecolorclosest () pur și simplu returnează cea mai apropiată valoare de culoare (cea mai precisă).

Î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 zonei de intersecție, trebuie mai întâi să obțineți valoarea variabilei RGB a filigranului, utilizând informațiile pe care le avem în ciclurile "pentru". Apoi, utilizând funcția "_get_ave_color", se determină valoarea medie a culorii pentru noua imagine. În continuare apare funcția "_get_image_color" pentru a determina gama de culori care va fi folosită de 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:

Scopul acestui fișier este foarte simplu: se afiseaza in sursa de browser (main.jpg) și a primit (watermark.png, watermarked) imagini.

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.

Și în concluzie







Articole similare

Trimiteți-le prietenilor: