Compresie imagine pe server

Compresie imagine pe server

Se pare că imaginile de pe site-urile dvs. cântăresc mai mult decât ar trebui. Acest lucru se datorează algoritmilor de compresie non-optimali care utilizează diverse programe. Apropo, Photoshop File-> Save for web optimizează imaginea. Și aici ACDSee și în special bibliotecile php de tip GD nu dau rezultate optime.







În plus, imaginea conține informații textuale suplimentare: data fotografiei, parametrii de fotografiere, modelul aparatului foto etc. Lăsați-l să fie 1%, dar de ce îl descărcați pentru utilizator.

Toate cele de mai jos se aplică comprimării fără pierderi de calitate. Ie imaginea vizuală le pierde calitatea.

Una dintre aceste imagini cântărește 1,7 kb, iar celelalte 2,3 kb

Una dintre aceste imagini cântărește 32 kb, celelalte 42 kb

Compresie imagine pe server

Compresie imagine pe server

Pentru ce este?

Pentru a accelera încărcarea paginii, în special pentru dispozitivele mobile (postul despre telefoanele mobile va fi mai târziu). Ei bine, și un loc pe un disc nu este deloc cauciuc.

De exemplu, pentru această postare. unde jumătate dintre fotografii au fost optimizate de Photoshop, compresia a dat 5%, nu pare atât de mult, dar în termeni absoluți este de 250KB, ceea ce este bine.

Și am observat că fotografiile vechi de la primele camere digitale sau scanările vechi sunt comprimate cu 50%. Deși aceste imagini arată în exterior și sunt atât de comprimate până la limită.

De unde să încep?

Comprimarea se face folosind bibliotecile pe care trebuie să le instalați pe server

pentru jpg: Jpegoptim
instalați apt-get install jpegoptim

pentru png: OptiPNG
instalați opt-get install optipng

pentru gif: gifsicle
instalați apt-get install gifsicle

Cum se comprima

Din consola pe care o lansăm

Există comenzi pentru comprimarea tuturor imaginilor din director, dar totuși suferiți de stilouri. Prin urmare, procesul trebuie să fie automatizat. În general, ideea de mai jos are sens, dacă aveți zeci de site-uri și zeci de mii de imagini.







În același timp, trebuie să ne amintim ce am optimizat deja, astfel încât să nu lucrăm dublu. Apropo, dacă imaginea a fost deja optimizată, dar cu re-optimizarea imaginii nu se întâmplă nimic.

Contabilitatea imaginilor

Este foarte convenabil să stocați căile spre imagini în baza de date și să le optimizați periodic (după coroană).

Creați o bază de date separată img cu un singur tabel img

Steagul is_compress indică starea procesării
0 - nu este încă optimizat
1 - optimizat cu succes
2 - eroare de optimizare

Compresie imagine pe server

De fapt, aceasta este o funcție recursivă care ocolește toate subdirectoarele și scrie căi spre tabelul img. Ie Trebuie să colectați mai întâi o listă a tuturor directoarelor principale cu imagini. Dacă există o mulțime de imagini, atunci puteți colecta imagini într-o singură lovitură sub forma unui server recursiv (server). recursiunea este o procedură consumatoare de timp pentru server.

Pe fiecare site există 1-2 puncte de încărcare a imaginilor (cum ar fi /ajax/upload.php)
În aceste scripturi trebuie să introduceți

Ca opțiune, optimizați imaginea în zbor, adică imediat în scenariul de a prescrie
shell_exec ("jpegoptim" .escapeshellarg ($ _ SERVER ['DOCUMENT_ROOT']. $ sFileLocalPath) "-strip-all");
Dar stocarea într-o singură bază de date într-un fel adaugă o comandă mai mare.

Începem să optimizăm Berlaga

Luați fiecare imagine și utilizați shell_exec () pentru a porni procesul necesar (jpegoptim, optipng, gifsicle) în funcție de extensia fișierului.

Nu este nevoie să luați întreaga masă dintr-o dată - serverul va fi suspendat. Bram pentru 5-100 de imagini la un moment dat. Suspendăm acest script în cron pentru fiecare minut. Ie când adăugați o imagine nouă site-ului - acesta va fi optimizat într-un minut.

rezultatul $ este rezultatul text al comprimării. Acesta conține procentul din fișierul care a fost furat - vom marca pavilionul is_compress = 1. Dacă nu există astfel de informații, a apărut o eroare și marcăm acest fișier cu pavilionul is_compress = 2

Aceasta este ceea ce pare ca atunci când este afișat (echo $ result. "
„;)

Compresie imagine pe server

De regulă, erorile apar din cauza extensiei incorecte a fișierului. De exemplu, a existat o hifă, iar pe site are o extensie de jpg - în timp ce browserele pot afișa în mod normal. S-ar putea, bineînțeles, să definiți extensia folosind tipul de mime.

Permisiuni de fișiere

pentru că shell_exec este executat din scriptul php, atunci proprietarul imaginilor ar trebui să fie ca Apache, adică www-date.

Se întâmplă de multe ori că site-ul a fost inundat cu ftp ca root, deci nu puteți optimiza și suprascrie aceste fișiere din php.

Prin urmare, trebuie să vă asigurați că directoarele și fișierele necesare aparțin www-datelor și drepturile sunt setate. Directoarele în care sunt șterse fișierele au dreptate 755, iar pentru imaginile 644.

Puteți face acest lucru prin consola, ftp-manager sau ISP-manager (un lucru convenabil pentru administrarea serverului)

Compresie imagine pe server

Compresie imagine pe server







Trimiteți-le prietenilor: