Pole typu <Img>
slouží k uložení obrázků ve formátu JPG. Kromě samotného uložení je možné při nahrávání obrázek zmenšit na rozměry určené vnitřními tagy Size
, včetně případného ořezu. Ve .aspx se obrázek vypíše pomocí <je:img>
.
<Img name="photo"> <Size name="original" /> <Size name="fullHD" /> <Size name="thumb" /> </Img>
Sadu obrázků lze připojit pomocí pole <ImgCollection>
. Pro obrázky v jiných formátech (PNG, GIF, SVG) je k dispozici pole typu <SimpleImg>
. To se používá i v situacích, kdy není žádoucí, aby JellyPot s nahrávaným JPG jakkoliv manipuloval.
Atributy
allowEditFor nepovinný [seznam skupin uživatelů]
Skupiny uživatelů, kterým je pole přístupné k editaci. Pokud není atribut zadán, je pole přístupné k editace všem, kteří mají přístup do administrace. Více v článku Zabezpečení před neoprávněným přístupem do administrace.
denyEditFor nepovinný [seznam skupin uživatelů]
Skupiny uživatelů, kterým je pole znepřístupněné k editaci. Pokud není atribut zadán, je pole přístupné k editace všem, kteří mají přístup do administrace. Více v článku Zabezpečení před neoprávněným přístupem do administrace.
desc nepovinný [string]
Uživatelský popis pole, který se zobrazí v administračním rozhraní. Slouží k zapsání doplňujících údajů, jako například pokyny pro editora apod.
langDepend nepovinný [none, firstValue, values]
Určuje chování pole, má-li web více jazykových mutací (viz Jazyky). Možné hodnoty jsou:
- none – obsah pole je pro všechny jazyky shodný
- firstValue – pole má v každém definovaném jazyce jinou hodnotu. Pokud není hodnota pro daný jazyk zadána, použije se hodnota výchozího jazyka.
- values – pole má v každém definovaném jazyce jinou hodnotu. Pokud není hodnota v daném jazyce zadána, je pole pro daný jazyk prázdné.
name povinný [string]
Jméno pole. V rámci jednoho typu musí být jedinečné. Smí obsahovat pouze číslice a písmena bez diakritiky. Doporučuje se jména polí uvádět s počátečním malým písmenem (viz Konvence pojmenování).
required nepovinný [false, true]
Při nastavení na true se pole stane povinným a při editaci v administraci je vyžadováno připojení obrázku.
title nepovinný [string]
Uživatelský název pole, který se zobrazí v administračním rozhraní. Není-li
title
uvedeno, zobrazí sename
.useAlt nepovinný [false, true]
Určuje, zda se má v administračním rozhraní v dialogu uploadu obrázku zobrazovat pole pro zadání alternativního názvu. Tento název může být automaticky vypsán do HTML při generování značky
img
(viz<je:img>
, atributalt
). Zadaný alternativní název je taktéž dostupný přes vnitřní polealt
(viz níže).
Vnitřní tag <Size>
Size
je vnitřní tag uváděný v rámci deklarace pole typu <Img>
nebo <ImgCollection>
. Určuje rozměry, na které bude nahraný obrázek upraven. Tagů Size
lze použít libovolný počet, JellyPot pak nahraný obrázek uloží do všech požadovaných rozměrů.
Atributy
alwaysResize nepovinný [false, true]
Při nastavení na true dojde k přeuložení obrázku, i když z hlediska rozměrů není přeuložení potřeba.
enlargeMode nepovinný [maintain, minimize, maximize]
Umožňuje ovlivnit výsledné rozměry obrázku, pokud zadané rozměry umožňují více interpretací. Atribut může mít tyto hodnoty:
- maintain – rozměry obrázku jsou upraveny tak, aby vyhovovaly zadaným hodnotám a zároveň aby prováděná změna rozměrů byla co nejmenší.
- minimize – rozměry obrázku jsou upraveny tak, aby vyhovovaly zadaným hodnotám a zároveň byly co nejmenší.
- maximize – rozměry obrázku jsou upraveny tak, aby vyhovovaly zadaným hodnotám a zároveň byly co největší.
Atribut zpravidla není nutné uvádět, v drtivé většině případů vyhovuje jeho výchozí hodnota
enlargeMode="maintain"
. Více níže, viz Určení výsledných rozměrů.height nepovinný [int, max int, min int, int-int, *]
Požadovaný výška obrázku v px, případně maximální nebo minimální výška nebo rozmezí. Není-li atribut uveden, výška může být libovolná.
name povinný [string]
Jméno velikosti. V rámci jednoho pole typu
<Img>
musí být jedinečné. Smí obsahovat pouze písmena bez diakritiky a číslice. Jméno se doporučuje uvádět s počátečním malým písmenem.path nepovinný [název složky]
Název podsložky ve složce
upItems/imgs
, do které se má nahrávaný obrázek uložit. Hodí se pro udržení pořádku ve složce s obrázky. Název složky smí obsahovat pouze písmena bez diakritiky, čísla a znaky-
a.
.quality nepovinný [int 0–100]
Kvalita ukládaného obrázku. Vyšší hodnota znamená nižší kompresi. Atribut má význam pouze tehdy, pokud dochází k přeuložení obrázku. Výchozí hodnota je 80.
width nepovinný [int, max int, min int, int-int, *]
Požadovaná šířka obrázku v px, případně maximální nebo minimální šířka nebo rozmezí. Není-li atribut uveden, šířka může být libovolná.
Určení výsledných rozměrů
Atributy width a height
Rozměry nahraného obrázku se upraví tak, aby vyhovovaly hodnotám uvedeným v atributech width
a height
příslušeného vnitřního tagu Size
. Do atributů width
a height
lze uvést tyto hodnoty:
Atribut | Popis |
---|---|
width="300" | výsledná šířka obrázku bude přesně 300 px, |
width="min 300" | výsledná šířka obrázku bude 300 px nebo více, |
width="max 300" | výsledná šířka obrázku bude 300 px nebo méně, |
width="100-300" | výsledná šířka obrázku bude nejméně 100 px a nejvýše 300 px, |
width="*" nebo atribut není uveden | výsledná šířka bude libovolná. |
Analogicky pro atribut height
.
Pokud rozměry nahraného obrázku vyhovují hodnotám zadaným v atributech width
a height
, JellyPot obrázek beze změny uloží. Pokud rozměry nevyhovují, JellyPot obrázek při zachování poměru stran zvětší nebo zmenší co nejméně tak, aby limitům vyhověl. Pokud to není možné – je např. určeno width="200" height="200"
a obrázek má rozlišení 300 × 200 px – pak se obrázek ořízne na střed.
enlargeMode
V některých případech rozměry určené atributy width
a height
připouštějí více výkladů – např. je určeno width="min 200" height="min 200" a obrázek má velikost 350 × 250 px. To podmínce vyhovuje, obrázek má víc než 200 px na šířku i na výšku. Při neuvedeném atributu enlargeMode
(což odpovídá jeho nastavení enlargeMode="maintain"
) JellyPot obrázek beze změny rozměrů uloží.
Pokud bychom však chtěli, aby obrázek měl alespoň 200 × 200 px, ale ne zbytečně víc, pak použitím enlargeMode="minimize"
změnší JellyPot rozměry obrázku na 280 x 200 px, což je nejmenší možná velikost, která vyhovuje zadání.
Hodnota enlargeMode="minimize"
tedy systému JellyPot říká: „udělej obrázek co nejmenší tak, aby ještě vyhovoval daným rozměrům“. enlargeMode="maximize"
je pak přesným opakem: říká „udělej obrázek co největší tak, aby ještě vyhovoval daným rozměrům“.
Z jiného úhlu pohledu lze říct, že pokud se v atributech vyskytuje rozlišení uvedené operátorem min, má smysl uvažovat o enlargeMode="minimize"
. Pokud se v atributech naopak vyskytuje rozlišení uvedené operátorem max, má smysl uvažovat o enlargeMode="maximize"
.
*Poznámka: Pokud se to zdá komplikované, nezoufejte, není to tak strašné. Změna rozměrů obrázku se v praxi chová tak, jak byste přirozeně očekávali – jen když se to přesně popíše, ukáže se, že přirozeně očekávané chování je vlastně docela komplexní ;)
Vnitřní pole
Pole typu <Img>
obsahuje další vnitřní pole. Tato pole jsou včetně jejich obsahu generována automaticky. Jejich obsah lze v .aspx vypsat pomocí controlu
.<je:item>
- alt – alternativní název, který byl zadán při uploadu obrázku a který může být použit jako obsah atributu
alt
HTML značky<img>
při vypsání obrázku do stránky (viz atributuseAlt
), - ext – přípona souboru bez úvodní tečky, např.
jpg
, - fullPath – úplná cesta k obrázku včetně názvu serveru, např.
http://www.example.com/app/uploads/obrazek.jpg
, - height – výška obrázku v px,
- imgID – řetězec s jednoznačným identifikátorem obrázku (všechny velikosti jednoho obrázku mají shodné
imgID
),
- nameOnServer – název souboru tak, jak je uložen na serveru, např.
someImage_someSize_0001.jpg
, - originalName – název souboru, pod kterým byl obrázek na server nahrán, s případně odstraněnou diakritikou (viz atribut
sanitizeName
elementu Uploads), - path – úplná cesta k obrázku, např.
/app/uploads/obrazek.jpg
, - size – řetězec s přibližnou velikostí souboru. Může obsahovat hodnoty např.
873 B
;23 kB
;1,2 MB
. Jednotka je určena automaticky podle velikosti daného souboru, - sizeInBytes – velikost souboru v bytech, vyjádřená jako číslo (např. 14147),
- width – šířka obrázku v px.
Některá vnitřní pole jsou společná pro všechny velikosti daného obrázku, obsah jiných (nameOnServer
, path
, size
, sizeAsNum
, width
, height
) záleží na konkrétní velikosti. V těchto případech je potřeba název vnitřního pole zadávat v syntaxi názevVelikosti-názevPole
. Tedy např. šířka obrázku ve velikosti thumb
je dostupná přes pole s názvem thumb-width
(<je:item runat="server" field="image.thumb-width" />
).
Uložení souborů na serveru
Nahrávané obrázky jsou ukládány do složky upItems/imgs
umístěné v rootu webu. Více informací je uvedeno článku Složky pro upload souborů z administračního rozhraní.
JellyPot standardně upravuje jména nahrávaných souborů – tedy i obrázků. Odstraňuje mezery, nahrazuje znaky s diakritikou apod. Toto chování lze změnit, více viz Uploads.
JellyPot dále do názvu souboru doplňuje název velikosti a pořadové číslo, pokud již ve složce existuje soubor se stejným názvem. Výsledný název souboru uloženého na serveru tedy může být např. photo_thumb_002.jpg
.
Příklady
V Site.config
máme proměnnou page
typu PageWithImage
:
<Var name="pageWithImage" type="PageWithImage" /> ... <Type name="PageWithImage"> <Img name="image"> <Size name="original" /> <Size name="fullHD" width="1920" height="1080" /> <Size name="thumb" width="320" height="200" /> </Img> </Type>
Pro vypsání obrázku v .aspx musíme v controlu <je:img>
uvést, kterou uloženou velikost obrázku chceme zobrazit. Tedy pro velikost fullHD
:
<je:img runat="server" field="pageWithImage.image" size="fullHD" />
Pokud bychom chtěli obrázek jen v náhledové velikosti, pak:
<je:img runat="server" field="pageWithImage.image" size="thumb" />