Varianty obrázkov
Deklarujte zmenšené alebo prevedené odvodeniny obrázkov priamo na skupine — generujú sa automaticky pri pridaní obrázka:
$this->addMediaBucket('photos')
->useDisk('public')
->storingVariantsOnDisk('cdn') // variants can live on a different disk
->registerVariants(function (VariantRegistrar $v): void {
$v->add('thumb')->fit('crop')->width(120)->height(120)->format('webp');
$v->add('display')->width(800)->format('webp')->quality(80)->queued();
$v->add('hero')->fit('cover')->width(1600)->height(600)->sharpen(2);
});Možnosti variantu
- Rozmery — width(), height() a fit() s contain, cover/crop, fill (s výplňou background()) a stretch.
- Formát — format() akceptuje jpg, png, webp, avif, gif (podľa aktívneho driveru).
- Kvalita / vzhľad — quality(1..100), background('#ffffff'), sharpen(int).
- Úložisko — storeOnDisk() pre prepis disku jedného variantu.
- Vykonanie — queued() / nonQueued() per variant.
Čítanie variantov
$media = MediaLibrary::for($user)->first('photos');
$media->getUrl('thumb'); // public URL of the generated variant
$media->getPath('display'); // path on the variants disk
$media->diskFor('thumb'); // the disk the variant was written to
$media->hasGeneratedVariant('thumb');Každý vygenerovaný variant sa zaznamená v generated_variants s názvom súboru, formátom a diskom, na ktorý sa naozaj zapísal, a každé URL, cesta, stream, presun, kópia aj mazanie vychádza z tohto záznamu:
$media->generated_variants;
// ['thumb' => ['file_name' => 'thumb.webp', 'format' => 'webp', 'disk' => 'hot']]Variant bez vlastného format() zdedí formát originálu (IMG_0001.JPG → keepformat.jpg; formát, ktorý drivery nevedia zapísať, napríklad .bmp, sa zmení na jpg). Disk variantu sa určí podľa priority — storeOnDisk() variantu, storingVariantsOnDisk() pridania, storingVariantsOnDisk() skupiny, config('media.variants_disk') a nakoniec disk média — a disk, na ktorý variant dopadol, sa zaznamená, takže getUrl(), diskFor() aj mazanie ho nasledujú.
Kontrola a pregenerovanie
MediaLibrary::variants($media) vypíše platné definície, ukáže, čo je vygenerované a čo chýba, a na požiadanie ich vykreslí — bez vynútenia len chýbajúce:
$variants = MediaLibrary::variants($media);
$variants->all(); // list<Variant> — every definition that applies
$variants->generated(); // ['thumb']
$variants->missing(); // ['display']
$variants->regenerate(); // render the missing ones → ['display']
$variants->regenerate(only: ['thumb'], force: true); // re-render thumb even though it exists
MediaLibrary::regenerate($media, only: ['thumb'], force: true); // the same verb, flatDrivery, fronty a eventy
Varianty používajú ext-imagick a prejdú na ext-gd; oba drivery automaticky narovnajú fotky otočené cez EXIF. Predvolene sa generujú synchrónne — frontu zapnete per variant (->queued()), per pridanie (->onQueue('media')) alebo globálne cez config('media.queue_variants_by_default'). VariantHasBeenGenerated sa spustí per variant a VariantsHaveBeenGenerated po dokončení všetkých variantov pridania. getUrl() pozná len varianty, ktoré skupina deklaruje: názov, ktorý skupina nikdy nedefinovala, alebo ešte nevygenerovaný variant vyhodí InvalidVariant, pokiaľ nie je config('media.url_fallback_to_original') nastavené na true — voliteľné názvy si strážte cez hasGeneratedVariant().
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.