scala imagini complexe în PHP

scalarea imagine complexă în PHP

Esența problemei

Primele idei

Încă de la începutul proiectului, am știut că a existat un astfel de lucru ca ImageMagick pentru Perl. Nu am reușit să ruleze această unitate minunat. Apoi am trecut la PHP, și am realizat că Perl nu este cu adevărat potrivit pentru astfel de lucruri. În PHP este de asemenea posibil pentru a forma imagini folosind modulul GD. Deși el va fi mai ușor, dar funcția de zoom, există, după cum este necesar.

Declarația problemei - a scrie un script care devine calea imaginii originale și să fie dedus datele de imagine / jpeg - (. Vezi descrierea protocolului HTTP) o imagine a formatului dorit.

script resize.php zoom-ului

Să vedem începutul script-ul:

Aici, ca de obicei verificat parametrii de intrare. Desigur, puteți seta condiții de testare mai stricte. Uită-te în continuare.

În această parte a programului vom încărca imaginea originală în $ src variabila. Funcții imagesx imagesy și de a determina dimensiunea imaginii originale și le înregistrează în variabilele corespunzătoare. Avem nevoie de ele pentru a calcula coeficientul de proporționalitate. Aici, folosind antetul funcției peredaom pentru antetul Content-type: image / jpeg în browserul utilizatorului. După aceea, el se așteaptă ca următorul flux de date este jpeg-fișier.

Condiția următoare este responsabil pentru dimensiunea imaginii de ieșire, și în mod direct în spatele ieșire. Este posibil ca imaginea originală are dimensiunea dorită. În cazul în care acest lucru nu este cazul. O vom procesa. Pentru a face acest lucru, a pus următoarea condiție:

Următoarea parte a programului va ajusta imaginea la lățimea de 218 pixeli (reducere proporțională) pentru cazul de $ de tip = 1.

Următoarea parte a codului complet inutile. Se imprimă o etichetă arbitrară pe imaginea finit. Mai mult decât atât, de culoare contrastantă: un fundal întunecat este litere albe pe o lumină - negru. În primul rând, vom defini coordonatele ieșirii de text (în acest exemplu, dreapta jos) și trei culori - alb $. $ $ Negru și gri, utilizând funcția imagecolorallocate. Pentru a determina culoarea de imprimare etichetă, comparabilă cu punctul de culoare (funcția imagecolorat), care este o inscripție cu „medie“ de culoare gri $. În cazul în care punctul de culoare va fi mai ușor decât gri, inscripția negru este ($ color = $ negru). În cazul în care punctul de culoare va fi gri mai închis, eticheta va fi de culoare albă ($ color = $ alb). În cele din urmă, definim șirul $ str și cauzele imagestring funcția sa. specificând dimensiunea fontului, pozitia, linie si culoare. Rețineți că această funcție afișează doar un singur tip de caractere latine. Deși tu, nimeni nu interzice să utilizeze fonturi TrueType, în beneficiul unor astfel de funcții acolo.

Se pare un pic mai complicat bucată de cod pentru o bucată pătrat.

Noi nu definesc factorul de zoom ca imaginea va fi un pătrat de dimensiuni cunoscute în prealabil. Pe dimensiunea imaginii poate fi de trei tipuri - orizontale, verticale și pătrate. În primele două cazuri, trebuie să taie și scară zona pătrată a imaginii dreptunghiulare. În al treilea - doar scalate.

explica ușor structura: rotunde ((max ($ w_src, $ h_src) - min ($ w_src, $ h_src)) / 2). Această expresie calculează coordonatele x sau y din colțul din stânga sus al blocului pătrat (nici o diferență pentru imaginile orizontale sau verticale). Acest lucru se poate vedea în figuri.

În mod normal, în imagini orizontale (chipuri, peisaje, obiecte) este partea cea mai informativa a centrului, și în cele verticale (cel mai adesea este de oameni în valoare) - cel mai important top. Pentru a schimba tăiat o bucată verticală a imaginii, linia:

poate fi înlocuită cu

Apoi, în imaginea pe verticală nu va lua partea superioară, iar media (depinde de localizarea obiectelor în fotografie). De asemenea, puteți lua partea de jos sau dreapta / stânga imagini orizontale - Experiment cu coordonate. Mai ales această metodă este utilă dacă doriți să creați un pătrat „previzualizări» (miniaturi) într-un singur tabel.

La sfârșitul imagejpeg imaginii de ieșire () și șterge imagedestroy de memorie ().

demonstrație zoom

Deci, nu trebuie să se schimbe frenetic variabilele de intrare în procesul de depanare de pe serverul local, am oferi o pagină demo care încarcă patru imagini de diferite formate. Testați imaginea originală trebuie să fie stocate în directorul curent sub numele de image1.jpg și image2.jpg. De asemenea, trebuie să fie fișier resize.php. care produce la ieșire jpeg-imagine.

Acest script este destul de simplu, acesta generează doar o pagină, link-ul, își desfășoară toate navigarea pe directorul de imagini. Toate lucrările de încărcare a imaginilor produse de resize.php. Se poate lua ca bază un simplu web-album.

De ce nu HG?

Am depanare script-uri în Windows, astfel încât să explice soluția la problema este pentru acest sistem de operare. Mai degrabă, script cauza defecțiunii în modulul absență php_gd.dll (sau php_gd2.dll mai nou). Deschideți folderul cu PHP interpret, de a crea un extensii de director, în cazul în care nu există. Localizați unitatea de mai sus - el este în distribuțiile totală PHP. Prescrierea în php. .ini (se află în c: \ windows) linie de extensie = php_gd2.dll (și, împreună cu extension_dir = "c: \ php \ extensions" În cazul în care acest lucru nu este prezent.). Căile pot fi diferite. După aceea, totul ar trebui să funcționeze. Nu „mix“ module php_gd.dll și php_gd2.dll - interpret va depune o plângere la dublarea funcțiilor în biblioteci.

concluzie

articole similare