NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Media Library for Laravel

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, flat

Drivery, 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 kryptomien

Odoslaní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.