Laravel 14. jūlijā izlaida versiju 13.20.0. Tā pievieno attēlu apstrādi pašā ietvarā, tāpēc izmēra maiņa, apgriešana un formāta konvertēšana tagad notiek ar Laravel paša API. Līdz šim izstrādātāji šīm darbībām parasti pievienoja atsevišķu bibliotēku vai iesaiņojumu. Jauno funkciju apraksta Laravel News.
Kodu pievienoja Laravel komandas izstrādātājs Nuno Maduro izmaiņu pieprasījumā #59276. Zem pārsega strādā Intervention Image ceturtā versija. Tā ir ieteicama, nevis obligāta atkarība, tāpēc bibliotēku joprojām jāuzstāda atsevišķi ar komandu composer require intervention/image.
Kāpēc tas maina ikdienas darbu
Intervention Image kā atsevišķa pakotne PHP izstrādē pastāv jau gadiem. Līdz šim to katrā projektā vajadzēja pieslēgt ar roku un pašam rakstīt kodu, kas savieno augšupielādēto failu ar bibliotēku. Laravel 13.20 šo savienojumu ieliek pašā ietvarā. Augšupielādētu failu tagad paņem tieši ar $request->image('photo'). Failu glabātuvē attēlu atver ar Storage::disk('s3')->image('photos/avatar.jpg').
Tipisks piemērs ir lietotāja profila attēls. Serveris saņem augšupielādi, pārbauda izmērus, izgatavo mazu sīktēlu sarakstam un lielāku versiju profila lapai. Agrāk katram šim solim vajadzēja atsaukties uz ārēju pakotni. Tagad visu ķēdi var uzrakstīt ar ietvara metodēm, tāpēc kontrolierī paliek mazāk starpkoda.
Laravel jau iepriekš ir iekļāvis kodolā funkcijas, kas agrāk bija atsevišķas pakotnes. Attēlu apstrāde ir nākamā šādā rindā. Šeit bibliotēka netiek pievienota piespiedu kārtā, tāpēc projekti bez attēlu vajadzībām nesaņem lieku atkarību. Kas grib apstrādi, tam Intervention Image jāuzstāda pašam.
Izvade WebP formātā ir noderīga tīmekļa lapām, jo WebP faili parasti ir mazāki par JPG vai PNG. Ar toWebp() pārveidošana notiek tajā pašā ķēdē, tāpēc atsevišķs konvertēšanas solis nav vajadzīgs.
Kā izsaukt attēlu
Attēlu var ielādēt no vairākiem avotiem. Papildus augšupielādei ir Image::fromPath(), Image::fromUrl(), Image::fromBytes() un Image::fromStorage(). Katrs no tiem atgriež attēla objektu, ar kuru tālāk strādā vienādi neatkarīgi no avota.
Metode $request->image() vienlaikus pārbauda, vai augšupielādētais fails tiešām ir attēls. Tā izstrādātājam nav atsevišķi jāraksta validācija pirms apstrādes. Ja fails nav derīgs attēls, ietvars to noraida vēl pirms nonākšanas pie dziņa.
Nemainīgi eksemplāri
Katra transformācija atgriež jaunu attēla eksemplāru. Sākotnējais attēls paliek neizmainīts. Rindā ieliktās darbības izpildās tikai brīdī, kad rezultātu pieprasa ar tādu metodi kā store() vai toBytes().
Šī pieeja ļauj no viena avota izgatavot vairākus variantus, katru ar savu apstrādi. Sīktēlu un pelēktoņu versiju no tā paša augšupielādētā faila uztaisa ar divām atsevišķām ķēdēm: $image->cover(200, 200)->toWebp()->store('thumbnails') pirmajai un $image->grayscale()->toWebp()->store('grayscale') otrajai.
Aizkavētā izpilde nozīmē, ka starprezultāti netiek ģenerēti bez vajadzības. Ja no viena avota veido piecus variantus, dzinis apstrādā avotu tad, kad katru variantu tiešām pieprasa. Tas atvieglo koda lasīšanu, jo darbību ķēdi raksta secīgi. Faktiskā izpilde notiek beigās.
Kādas transformācijas pieejamas
Izmēra darbības ir cover(), contain(), crop(), resize() un scale(). Efektiem ir blur(), sharpen(), grayscale(), rotate() un flip(). Visas var savirknēt vienā ķēdē.
Izvadei var izvēlēties formātu ar toWebp() vai toJpg()->quality(), saspiest ar optimize() un saglabāt ar store(). Attēla parametrus pārbauda ar width(), height(), mimeType() un toBase64(). Rezultātu var dabūt kā baitus ar toBytes() vai kā datu URI ar toDataUri().
GD vai Imagick
Laravel 13.20 piedāvā divus dziņus, GD un Imagick. GD nāk kopā ar lielāko daļu PHP instalāciju, tāpēc tas parasti jau ir pieejams. Imagick ir atsevišķs PHP paplašinājums, kas apstrādā vairāk formātu un dažkārt dod labāku kvalitāti. Dzini norāda ar usingGd() vai usingImagick(). Ar Image::transformUsing() var pielāgot dziņa uzvedību.
Pēc noklusējuma darbojas tas dzinis, kas serverī pieejams. Abus dziņus darbina Intervention Image ceturtā versija. Lielākajai daļai projektu pietiek ar GD. Imagick der tad, kad jāapstrādā formāti kā TIFF vai daudzlappušu attēli.
Attēlu apstrāde tagad ir daļa no Laravel API, bet Intervention Image bibliotēka jāuzstāda atsevišķi. Projektiem, kam attēlu apstrāde nav vajadzīga, nekas papildus nav jāinstalē.
Kas vēl ir laidienā
Papildus attēliem 13.20.0 pievieno kontroliera atribūtu #[WithoutMiddleware], kas noņem starpprogrammatūru no atsevišķa kontroliera. Klāt ir arī atsevišķs Redis sesiju prefikss un Eloquent metodes incrementEachQuietly() un decrementEachQuietly(). Rindu atslēgas WithoutOverlapping tagad pieņem enum vērtības. Labojumi apkopoti Laravel laidienu vēsturē.
Nedēļu vēlāk, 21. jūlijā, sekoja versija 13.21.0 bez lielām jaunām funkcijām. Laravel 12 līnija turpina saņemt labojumus. Versija 12.64.0 iznāca 14. jūlijā ar enum atbalstu rindu pārklāšanās atslēgām. Laravel 13 kā galvenā versija iznāca 17. martā, tāpēc attēlu apstrādei jābūt vismaz 13.20.0.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.