---
title: "Varianty obrázkov — Media Library for Laravel | Roundly"
description: "Deklarujte zmenšené/prevedené odvodeniny, ktoré sa generujú automaticky; riaďte rozmery, formát, kvalitu a disk."
url: https://roundly-consulting.com/sk/open-source/navody/media-library-for-laravel/varianty-obrazkov
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Media Library for Laravel](https://roundly-consulting.com/sk/open-source/navody/media-library-for-laravel.md)

# Varianty obrázkov

Deklarujte zmenšené alebo prevedené odvodeniny obrázkov priamo na skupine — generujú sa automaticky pri pridaní obrázka:

```php
$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

```php
$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:

```php
$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:

```php
$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'). Frontovaný GenerateVariantsJob sa odošle až po potvrdení okolitej transakcie (ShouldQueueAfterCommit), takže worker nikdy nehľadá riadok, ktorý ešte neexistuje. 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().

Variant, ktorý sa nepodarí vykresliť pri pridaní, naviazaní draftu, attach, presune, kópii či náhrade — obrázok, ktorý driver nevie dekódovať, alebo disk, ktorý odmietne zápis —, sa nahlási vášmu exception handleru a preskočí: ostatné varianty sa vykreslia a volanie uspeje s uloženým médiom. Explicitné regenerate() naopak vyhodí výnimku — namiesto zachytávania výnimky pri pridaní preto kontrolujte MediaLibrary::variants($media)->missing().

## Čo sa dekóduje

Oba vstavané drivery súbor pred dekódovaním preveria:

- Len rastrové typy — JPEG, PNG, GIF, WebP, AVIF, BMP, TIFF, HEIC/HEIF a ICO, rozpoznané z bajtov; Imagick každý číta cez explicitný coder daného typu, takže si súbor nikdy nevyberie vlastný dekodér. SVG sa nikdy nedekóduje (SVG môže odkazovať na iné súbory na serveri): SVG médiá nedostanú varianty ani náhľady a regenerate() pre ne nevykreslí nič.
- Limit pixelov — šírka × výška sa prečíta z hlavičky bez dekódovania a obrázok nad media.max\_image\_pixels (predvolene 50 000 000) sa síce uloží, no bez variantov aj náhľadov; explicitné regenerate() vyhodí InvalidVariant. GD dekóduje v rámci memory\_limit PHP (približne 5 bajtov na pixel), preto na GD serveroch s nízkym limitom hodnotu znížte.
- Len prvý snímok — Imagick číta snímok 0 animácie či viacstranového TIFF-u, takže variant animovaného GIF-u je jeho prvý snímok, rovnako ako s GD.

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/media-library-for-laravel.md)
