Manipulace s obrázky [Nový ImageStorage]
- flexroad
- Člen | 117
Ahoj,
narazil jsem na chybku u 1.4.2…
Pokud potrebuji zmenit u obrazku nazev souboru a ulozit tak to nefunguje. U verze 1.4.1 bylo vse funkcni a v poradku.
$savedImage = $this->imageStorage->saveUpload($fileUpload, 'namespace');
//tady kontroluji, jestli se obrazek podarilo nahrat a vytvarim zaznam v databazi -> vrati $recordId
$newFilename = $recordId . "-" . $filename;
$savedImage->setName($newFilename);
$savedImage->save();
Nejake napady, co muze byt spatne?
Diky @flexroad
- Martk
- Člen | 661
@flexroad Vypadá to, že v nejbližší době si k tomu zase sednu a něco napíšu.
$upload = $this->imageStorage->saveUpload($fileUpload, 'namespace', FALSE); // FALSE - Neuloží se automaticky ve funkci
$upload->setName('myName.jpg'); // Ještě přibude setter na příponu.
$upload->save();
- Jan Mikeš
- Člen | 771
@Antik jen nápad, co kdyby {img NULL} a <img n:img=„NULL“> vracelo obrázek noimage? Momentálně se mi děje to, že do src se dá něco jako #/noimage, nevím jestli je chyba u mě, dá se to samozřejmě ošetřit tím, že zjistím, jestli v proměnné, kterou do makra dávám, není NULL atd… je to jen nápad :)
- Martk
- Člen | 661
@Lexi hastag se nastaví, pokud obrázek noimage neexistuje nebo proměnná není nastavena viz. https://github.com/…ge/Image.php#L68
Editoval Antik (31. 7. 2015 22:07)
- Martk
- Člen | 661
@Lexi jestli myslíš konkrétní soubor .gitginore, tak ano, používám to takhle.
@flexroad V master verzi lze použít tvoje řešení bez potíži, ale musíš počítat, když bude argument $save true, tak se nahraná hodnota do originální složky.
Pro ostatní: přemýšlel jsem, že bych mohl nahodit kompresi obrázků pro originální soubory (už to mám rozdělané, ale chci slyšet názor ostatních).
- Buďto použít api od: https://tinypng.com/ (Kompresi 500 obrázků zdarma)
- Použít https://pngquant.org/
- Komprese obrázku zabírá někdy hodně, takže by se mohli obrázky ukládat do tempu (soubor se seznamem obrázků) a následně cronem se ty obrázky komprimovat (možná bude nějaký limit obrázky, kdy to ukládat do tempu, při uploadu, aby se to dlouho nekomprimovalo?). Když se dosáhne limitu 500 obrázků (nebo nastaveného limitu), tak se obrázky automaticky budou do tempu. Promyšlené do detailu to mám jak bych to udělal, aby to bylo uživatelský příjmné, ale zajímá mě názor zda to tam chcete mít nebo vytvořit zvláštní extension nebo to vynechat.
- Tady není snad co dodat.
Editoval Antik (6. 8. 2015 12:22)
- Jan Mikeš
- Člen | 771
@Antik tvuj plugin vyuzivam dost casto a temer vsude, osobne bych byl
za to, aby komprese obrazku byla volitelna a) globalne jako nastaveni v configu
extension b) toto globalni nastaveni prepsat napr u controlu ve formu
$myUploadControl->activateCompression()
/
$myUploadControl->deactivateCompression()
nebo primo pri
uploadu… nebo neco na ten zpusob, ne pro kazdeho a ne vzdy muze byt komprese
zadouci, ale verim ze na toto jsi myslel :)
Editoval Lexi (6. 8. 2015 20:52)
- Martk
- Člen | 661
@flexroad Už je to skoro připravené na napojení viz. connectory (možná to bude chtít ještě upravit, nedíval jsem se ještě na Amazon)
- ryder
- Člen | 17
Ahoj, narazil jsem ve verzi 1.4.3 na pár problémů s komponentou MultiUploadControl.
- je potřeba
kdyby/forms-replicator
, ale není uvedený v composer.json, takže je pak potřeba doinstalovat ručně - odeslání formuláře končí
Call to a member function isOk() on a non-object
v souboru/vendor/webchemistry/images/src/Addons/UploadControl.php:79
zkusil jsem to nějak debugovat a vypadá to, že$upload
obsahuje pole
Jinak super komponenta, která ušetří hodně času. Díky
- Croc
- Člen | 270
Zdravím,
zatím se seznamuji s touto komponentou, ale měl bych jednu otázku. Kde je
dostupný MultiControlUpload? Je tu zmiňovaný, ale verzi 1.4.3 ho
nevidím.
Dále bych se chtěl prosím zeptat ohledně instalace
WebChemistry-Forms-Controls
(odkaz).
Nechybí v návodu configurace v configu .neon
(nebo pro
bootstrap)? Dle uvedeného návodu se mi to nedaří rozběhnout.
Díky
- Martk
- Člen | 661
@Croc Komponenta je dostupná tady: https://github.com/…dControl.php , ale nedoporučuji používat, protože neobsahuje testy a bude se rozdělovat na jiný balíček.
Instalace je přes trait v základní formuláři. Staticky jsem to zamítl, kvůli našeptávání v ide.
class MyForms extends Nette\Application\UI\Forms {
use WebChemistry\Forms\Controls\TForm;
}
Použití:
$form = new MyForms;
$form->addDate('date', 'Datum'); // atd.
Editoval Antik (17. 11. 2015 14:17)
- Jan Mikeš
- Člen | 771
Ahoj, zkusil jsem použít nový, přepsaný doplňek, při použití
setRequired()
na controlu při editaci nepustí bez vybrání
nového obrázku. Nejsem si teď jist, ale mám pocit, že u předchozí verze
pokud bylo nastaveno setRequired()
a nebyl označen checkbox na
smazání, tak nebylo potřeba uploadovat nový obrázek.
Momentálně řeším tak, že kontroluji pokud entita nemá property
s cestou k obrázku NULL tak setRequired()
nenastavuji.
Docela mi dává smysl, pokud vyžaduji obrázek, tak stačí, aby tam vždy nějaký byl, takže při editaci pokud obrázek nechci přehrát, tak ponechat stávající.
edit: zároveň, pokud je obrázek vyžadován, asi bych nevykresloval checkbox pro smazání, pro běžné uživatele to může být trošku matoucí
Editoval Lexi (3. 2. 2016 23:45)
- Jan Mikeš
- Člen | 771
@Antik parada, fix funguje, diky za to! Jeste napad, pokud neni input oznacen jako required, klidne bych tam nechal ten upload control, stejne jako je to v pripade ze je povinny, takhle musis obrazek nejdrive smazat, aby jsi jej mohl znovu uploadnout.
Btw mas v planu implementovat zase client side skripty, stejne jako tomu bylo u predchozi verze + nejake demo nebo dokumentace k tomu? Delsi dobu zvazuju, ze udelam multipleupload a pokud by s tim umel doplnek nejak pracovat uz v zakladu bylo by to bozi :-)
- flamengo
- Člen | 135
Bohužel composer mi doplněk nenainstaluje :(
composer require webchemistry\images
[InvalidArgumentException]
Could not find package webchemistry\images at any version for your minimum-
stability (stable). Check the package spelling or your minimum-stability
require [--dev] [--prefer-source] [--prefer-dist] [--no-progress] [--no-update]
[--update-no-dev] [--update-with-dependencies] [--ignore-platform-reqs] [--sort-
packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--] [<packag
es>]...
Nette 2.4 (asi, instalace dle dokumentace 2.4). Jen tak mimo téma, jak zjistím verzi Nette?
- flamengo
- Člen | 135
@Antik
Mám pár dotazů:
1/ Při pokusu o:
$form->addImageUpload('upload', 'Upload')
->setNamespace('namespace');
Fatal Error Class ‚WebChemistry\Images\Helpers\Quality‘ not found
File: ...\vendor\webchemistry\images\src\AbstractStorage.php:40
37: private function extractHelpers(array $helpers) {
38: foreach ($helpers as $name => $class) {
39: if (!is_object($class)) {
40: $helpers[$name] = new $class;
Bohužel 'WebChemistry\Images\Helpers\Quality ani nic podobného jsme ve zdrojácích nenašel :(
2/ Metoda addMultiImageUpload()
je pro hromadný upload pouze
obrázků, nebo umí i ostatní soubory (např. PDF)?
3/ Je někde k dispozici funkční demo?
4/ Jen taková poznámka. V dokumentaci je u konfigurace uvedeno image, ale zřejmě by tam mělo být images.
Předem díky za reakce.
Editoval flamengo (30. 6. 2016 10:55)
- Martk
- Člen | 661
- Aktualizoval bych na verzi 2.1.3 . Helper quality je deprecated.
- Jenom pro obrázky a využívá jen atributu multiple. Pokud chceš použít multiupload jiných souborů, tak můžeš použít druhý UploadControl v nette a nastavit třetí atribut addUpload na TRUE. Pokud chceš replikaci inputů, tak můžeš použít: kdyby/replicator nebo webchemistry/forms-multiplier
- Funkční demo není k dispozici.
- Ano, je to tak. Dokumentaci moc často neaktualizuji, budu rád když pošleš PR.
- flamengo
- Člen | 135
Ahoj, jak nastavím svůj název obrázku?
Zkusil jsem dle příspěvku výše:
$savedImage = $this->imageStorage->saveUpload($values->image, $this->img_namespace.'/'.$id);
$savedImage->setName($newFilename);
$savedImage->save();
a
Fatal Error
Call to a member function setName() on string
Najdu někde nějaká best practice nebo nějaký ukázkový kód, či seznam
možností?
Předem díky za reakci.
Editoval flamengo (5. 8. 2016 20:01)
- Martk
- Člen | 661
@flamengo Ahoj, nevím jakou používáš verzi, ale v nejnovější stable verzi je jako poslední parameter callback.
$this->imageStorage->saveUpload($values->image, $this->img_namespace.'/'.$id, function ($image) {
$image->setName($newFilename);
});
// tady nic neukládat, uloží se to v metodě saveUpload
Editoval Antik (5. 8. 2016 20:41)
- flamengo
- Člen | 135
Používám webchemistry/images 2.1.4
Uvedený kód jsme pouze zkopíroval a výsledek :(
Notice
Undefined property: Nette\Utils\ArrayHash::$image
218: $this->imageStorage->saveUpload($values->image,
$this->img_namespace.‚/‘.$id, function ($image) {
219: $image->setName($newFilename);
220: });
Uvádím větší kus kódu (zjednodušený):
protected function createComponentForm(){
$form = new MyForm;
$form->setTranslator($this->translator);
$form->addText('name', 'forms.inputs.name')
->setRequired('forms.rules.filled');
$form->addUpload('image', 'forms.inputs.img')
->setRequired('forms.rules.filled')
->addRule(MyForm::IMAGE, 'forms.rules.image');
$form->addSubmit('send', 'admin.btn_add');
$form->onSuccess[] = array($this, 'processAddForm');
return $form;
}
public function processAddForm(MyForm $form){
$values = $form->getValues();
$valuesOriginal = clone $values;
unset($values['image']);
$id = $this->model->insert($values);
$newFilename = $values['name'];
$this->imageStorage->saveUpload($values->image, $this->img_namespace.'/'.$id, function ($image) {
$image->setName($newFilename);
});
$this->flashMessage($this->translator->translate('admin.msg.add_success'), 'info');
}
Editoval flamengo (7. 8. 2016 15:23)
- Martk
- Člen | 661
V tomto kódu zrušíš index image a potom k němu přistupuješ:
public function processAddForm(MyForm $form){
$values = $form->getValues();
$newFilename = $values['name'];
$this->imageStorage->saveUpload($values->image, $this->img_namespace.'/'.$id, function ($image) use ($newFilename) {
$image->setName($newFilename);
});
$valuesOriginal = clone $values;
unset($values['image']);
$id = $this->model->insert($values);
$this->flashMessage($this->translator->translate('admin.msg.add_success'), 'info');
}
Můžu se zeptat jak potom získáváš obrázek?
- flamengo
- Člen | 135
S tou chybou jsi měl samozřejmě pravdu, měl jsem tam záměnu
$valuesOriginal
a $values
, díky.
Takže jsem se dostal o kousek dál a opět jsme narazil :(
Ano, jak získám ten obrázek, to bych taky potřeboval vědět.
Původní představa byla, že v editačním formuláři se zobrazí náhled
obrázku nějak takto:
$form->addUpload('image', 'forms.inputs.img')
->setRequired('forms.rules.filled')
-> // další kód
if($this->getParam('id') && !is_null($this->item->img)){
$form['image']->setOption('description', Html::el('img')->src($this->item->img)->class('preview'));
}
Takže jsem narazil na to, ja kvůbec vytvořit obrázek bez použití latte a makra.
Našel jsem toto: https://forum.nette.org/…imagestorage#…
$this->imageStorage->create($this->item->img, '200x300', 'flag')
->setNoImage(NULL) // Nebude se generovat no image
->createLink(); // Generace zmenšeného obrázku a vrácení cesty
Fatal Error
Call to undefined method
WebChemistry\Images\FileStorage\FileStorage::create()
Dále jsme zkusil toto:
$this->imageStorage->get($this->item->img, '200x200');
Čekal jsem, že v případě, že obrázek o zadané velikosti neexistuje, že se vytvoří. Nestalo se tak. Takže ani toto nemohu použít.
Takže mám pár dotazů:
- Jak vytvořim tak banální věc, jako je náhled vloženého obrázku a to dřív, než v latte šabloně?
- Lze z něčeho takovéhoto
$this->imageStorage->get($this->item->img, '200x200');
získat relativní adresu obrázku a absolutní adresu? - Pokud smažu obrázek
$this->imageStorage->delete($this->item->img);
, lze nějak nastavit, aby se smazaly i prázdné složky, které zůstanou po obrázku? - (EDIT) Lze obrázky nějak přejmenovat, přesunout, zkopírovat?
Předem díky za odpovědi.
PS: Používám Nette 2.4
Editoval flamengo (8. 8. 2016 17:40)
- Martk
- Člen | 661
Na nahrávání ti doporučuji použít tuto komponentu pro formuláře, registruje se sám k formulářům, nezakážeš-li to v konfiguračním souboru. Řeší jak odstraňování, tak i nahrávání a náhled obrázků.
$form->addImageUpload('image', 'forms.inputs.img')
->setRequired('forms.rules.filled')
->setNamespace($this->img_namespace)
->onBeforeSave[] = function ($image) use ($form) {
$image->setName($form['name']->getValue());
};
V processAddForm metodě již nemusíš nic řešit a uložit vrácenou hodnotu z klíče image. Bude obsahovat string nebo NULL, v případě povinného pole jenom string.
2.
$this->imageStorage->get($this->item->img, '200x200')
získáš jen třídu pro tento obrázek, link potom
$this->imageStorage->get($this->item->img, '200x200')->getLink()
,
obsahuje url adresu i s basePath.
3. Hodím to do masteru.
Když chceš ukládat jméno obrázku, tak doporučuji to dělat takto:
$image = $this->imageStorage->saveUpload($values->image, $this->img_namespace.'/'.$id, function ($image) use ($newFilename) {
$image->setName($newFilename);
});
$imageName = (string) $image;
protože, existuje-li obrázek se stejným názvem, tak se udělá prefix a navíc potom můžeš snadno získat obrázek:
$link = $this->imageStorage->get($imageName)->getLink();
Měl bych si asi sednou a napsat pořádnou dokumentaci.
- flamengo
- Člen | 135
Na nahrávání ti doporučuji použít tuto komponentu pro formuláře, registruje se sám k formulářům, nezakážeš-li to v konfiguračním souboru. Řeší jak odstraňování, tak i nahrávání a náhled obrázků.
Komponentu WebChemistry\Images\Controls\Upload
jsem testoval a
poté jsem se rozhodl ji nepoužít:
- V okamžiku, kdy nahrávám soubor, neznám ještě ID vloženého
záznamu, který používám pro název složky, do které obrázek potřebuji
umístit. Komponenta soubor uloží hned a až potom vložím data do databáze.
Zde by se to dalo vyřešit nějakým
rename()
čimove()
, má/nemá? - Zobrazí náhled? Prosím o příklad. Tak nějak jsem to dle tohoto vlákna pochopil, že by to mělo něco zobrazit, ale při hokusech pokusech se mi to ani jednou nepovedlo.
- Mám vlastní render na formuláře, kde si vkládám u povinných položek
červenou hvězdičku:
$this->wrappers['label']['requiredsuffix'] = Html::el('span')->class('required text-danger')->setText(' *')->title('vyžadováno');
U tvého control prvku toto nefunguje.
$form->addImageUpload('image', 'forms.inputs.img') ->setRequired('forms.rules.filled') ->setNamespace($this->img_namespace) ->onBeforeSave[] = function ($image) use ($form) { $image->setName($form['name']->getValue()); };
Použil jsem přesné znění kódu a:
Nette\MemberAccessException
Call to undefined method Nette\Utils\Image::setName().
Tak a zpět k dotazům.
- Jak mohu vytvářet obrázky bez zavolání makra v šabloně ???
- Lze obrázky nějak přejmenovat, přesunout, zkopírovat?
A jinak díky moc za trpělivost.
Editoval flamengo (8. 8. 2016 18:56)
- Martk
- Člen | 661
Omlouvám se, zapomněl jsem, že se v tomto eventu předává Nette\Utils\Image, v devu už jsou na to 2 eventy a přejmenoval jsem onBeforeSave (deprecated) na onUpload.
1. Tak v tom případě je opravdu nejlepší si udělat vlastní upload. Jen si dávej pozor, zda obrázek existuje, jinak se doplní název obrázku o prefix.
2.
$form->addImageUpload('image')
->setDefaultValue('namespace/image.jpg'); // Musí existovat obrázek
3. Tohle jsem nikdy nepotřeboval, ještě prozkoumám.
1.
$image = $imageStorage->get($fullName, '200x100')->getLink(); // Vytvoří a vrátí link na obrázek
2. Pohodlně ne, udělám ve verzi 2.3:
$original = $imageStorage->get($fullName);
$copy = $original->copy('copy_namespace/copy_name.jpg');
$move = $original->move('move_namespace/move_name.jpg'); // přejmenování a přesunutí je v podstatě stejná věc
- flamengo
- Člen | 135
@Antik Ahoj, dosti začátečnická otázka, ale jak dostanu
imageStorage do komponenty?
Pokud mám formulář v presenteru, tak vše funguje, Chci si trochu pročistit
presentery a tak přesouvám formuláře do komponent.
class Form extends Control{
use \WebChemistry\Images\TPresenter;
public function render(){
dump($this->imageStorage);
}
}
Zobrazí NULL
. Jat to tam prosím dostat? Díky.
- Jan Mikeš
- Člen | 771
@flamengo klasicky jako kazdou jinou sluzbu zaregistrovanou v DIC, pres constructor nebo inject metodu.
(https://github.com/…resenter.php – pravdepodobne nemas na te komponente povolene injecty)
Editoval Lexi (23. 8. 2016 18:00)
- flamengo
- Člen | 135
@Lexi Dík, to jsem tak nějak věděl. Jen jsem nevěděl, kterou třídu, ale pak mě to trklo :)
use Nette\Application\UI\Control,
WebChemistry\Images\AbstractStorage;
class Form extends Control{
/** @var WebChemistry\Images\AbstractStorage */
private $imageStorage;
/**
* @param AbstractStorage $imageStorage
*/
public function __construct(AbstractStorage $imageStorage){
parent::__construct();
$this->imageStorage = $imageStorage;
}
}
- Martk
- Člen | 661
Připravují teď verzi 3.0 (podpora pro cloudinary bude a je implementována) a mám jedno dilema, nastíním:
v nynější verzi se upravuje obrázek krkolomně:
$storage->saveUpload($fileUpload, 'namespace', function ($image) {
$image->setWidth(100);
// ...
});
v nové verzi to půjde přes modifikátory (latte syntax), bude možnost napsat jednoduše vlastní.
$res = $storage->createUploadResource($fileUpload);
$res->setNamespace('namespace');
$res->parse('resize:100,200,exact|sharpen');
$result = $storage->save($res);
$result->parse('baseUri');
echo $storage->link($result);
Problém je v tom, že u lokálního úložiště se bude nejspíše
vytvářet složka s hashem ⇒ nepřehlednost. Takže jsem zavedl aliasy,
které se převedou na modifikátory např.:
konfigurace:
images:
local:
aliases:
thumb: 'resize:20,20,exact'
použití:
$storage->parse('@thumb');
Vytvoří se složka s názvem thumb bez hash, pokud se změní hodnota aliasu, tak se jednoduše smaže složka a vše se nahraje znova.
A teď to dilema:
- Zakázat modifikátory a používat jen aliasy. (aliasy se budou možná hodně množit)
- Používat modifikátory a aliasy:
ukázka:
$storage->parse('@thumb|crop:10,10,10,10');
Problém č.1: upřednostňovat alias nebo modifikátor?
Problém č.2: složka se bude generovat jako thumb-s4d545sf45f4s
- Nekombinovat aliasy a modifikátory.
- Nepoužívat aliasy.
Editoval Antik (25. 8. 2016 15:15)
- Landsman
- Člen | 152
@Antik Jak řešíš thumbs, které se nepoužívají? V jednom CMS, které jsem používal bylo skvělé řešení pro údržbu, která cronem zjišťovala poslední použití miniatury a pokud překročil datum nastavený interval, smazala ji. Všechny miniatury byly tedy v jedné složce, ale nenarazil jsem na potřebu to měnit / řešit.
Jinak koukám super rozšíření, používám něco vlastního, ale brzy asi přejdu! :)
- Martk
- Člen | 661
Zatím jsem neřešil, protože jsem to nemusel, ale byl jsem jednou odhodlán napsat kód a taky jsem napsal na cleaner, který by toto řešil na stejném principu (mazání obrázku starší než měsíc, zachování např. 5 nejnovějších obrázků, mazání obrázku u kterých byl přístup větší než měsíc), ale už jsem ho nenašel, tak ho někdy napíšu znova :). Potom jsem zaznamenal problém, kdy jsem generoval např. pro produkty miniatury o určité velikosti s helpery, změnil se design a musel jsem všude měnit ty velikosti a mazat složité názvy složek pro invalidaci, tohle by měli řešit aliasy popsaný o 2 příspěvky výše.
- Landsman
- Člen | 152
Antik napsal(a):
Zatím jsem neřešil, protože jsem to nemusel, ale byl jsem jednou odhodlán napsat kód a taky jsem napsal na cleaner, který by toto řešil na stejném principu (mazání obrázku starší než měsíc, zachování např. 5 nejnovějších obrázků, mazání obrázku u kterých byl přístup větší než měsíc), ale už jsem ho nenašel, tak ho někdy napíšu znova :). Potom jsem zaznamenal problém, kdy jsem generoval např. pro produkty miniatury o určité velikosti s helpery, změnil se design a musel jsem všude měnit ty velikosti a mazat složité názvy složek pro invalidaci, tohle by měli řešit aliasy popsaný o 2 příspěvky výše.
Aha, to zní dobře! Tzn. že by jsi přegeneroval miniatury pouze konkrétních položek a nemusel přegenerovávat vše (tak to řeší většina lidí ve wordpressu a vždy mi to přišlo hloupé).
- mordare
- Začátečník | 117
Zdravím. Dělám update projektu na Nette 2.4 a dělám update i všech
knihoven včetně ImageStorage.
Přesněji sem přešel na verzi 2.2
Akorát teď když použiju Traitu tak mi začne laděnka házet tuto chybu:
Service of type WebChemistry\Images\AbstractStorage used in @var annotation at WebChemistry\Images\TPresenter::$imageStorage not found. Did you register it in configuration file?
Edit: ve chvíli kdy sem dal do Traity jako @inject IImageStorage tak to jede OK
Editoval mordare (15. 9. 2016 13:00)
- erikbalog
- Člen | 27
zdravím, používam tento doplnok a obrázky ukladám takto:
<?php
$this->imageStorage->saveUpload($values->poster, 'poster', function (\WebChemistry\Images\FileStorage\Image\Image $image) {
$image->setNameWithoutSuffix($this->movie->getId());
$image->setSuffix('jpg');
});
?>
uloží sa pod názvom id.jpg napr. 1.jpg .. ale keď obrázok chcem nahradiť tak sa neprepíše súbor 1.jpg ale vytvorí sa nový vi26kotfq5_._1.jpg, neviete mi poradiť? nedokážem na to prísť
Ďakujem
Editoval erikbalog (26. 11. 2016 20:12)
- Martk
- Člen | 661
@erikbalog Budeš muset udělat toto:
<?php
$this->imageStorage->delete($this->movie->getId() . '.jpg');
$this->imageStorage->saveUpload($values->poster, 'poster', function (\WebChemistry\Images\FileStorage\Image\Image $image) {
$image->setNameWithoutSuffix($this->movie->getId());
$image->setSuffix('jpg');
});
?>
- Martk
- Člen | 661
Verze 3.0 beta
Po dlouhé době jsem se dokopal dodělat dlouho rozdělanou verzi. Beta verze proto, že musím ještě otestovat a dodělat podporu pro cloudinary.
Změny
- Obrázky jsou nyní objekty. 2 základní typy, jeden reprezentuje již nahraný obrázek, druhý obrázek připravený k nahrání.
- Složitější úpravy obrázků
- Obrázky se nadále upravují jen přes předem definované aliasy ⇒ rychlejší a přehlednější
- V modifikátorech lze použít pole
- Před nahráním originálního obrázku jde upravit obrázek aliasem, obrázek se uloží do složky original
- Nové funkce copy, move, save
- Funkce delete odstraňuje prázdné složky
- Podpora cloudinary
- Typ „image“ pro doctrine
- Komponenta UploadControl umí jen převádět obrázek na objekt
Budu rád za každé nahlášení chyby nebo návrh ke zlepšení, před vydáním ostré verze.
- Jan Mikeš
- Člen | 771
Obrázky se nadále upravují jen přes předem definované aliasy ⇒ rychlejší a přehlednější
Toto jsem jednu dobu používal ve svém doplňku a již nikdy více :-) nešla by funkčnost variabilních rozměrů bez potřeby definovat předem alias zachovat?
Typ „image“ pro doctrine
Palec hore!
Komponenta UploadControl umí jen převádět obrázek na objekt
Co to přesně znamená? Bude potřeba ve handlerech formulářů obrázek
uploadovat, případně na něm volat ->save()
?
- Jan Mikeš
- Člen | 771
Dokáži si živě vybavit 2 situace, kdy mě to vyloženě sralo :-)
- Dopředu jsem na projektu nikdy nevěděl, jak fotka bude přesně velká, když jsem to zjistil, musel jsem jít a nadefinovat si velikost miniatury, jejich počet narůstal a nepořádek byl veliký, chtěl jsem přijít, zadat rozměry obrázku a fungovat. Rrozměry jsem měl často uložené i v databázi, takže jsem je měl v proměnné – tato situace je neřešitelná, pokud je potřeba si definovat aliasy.
- Na projektu kde pracuje více lidí a časem aliasů přibývá, nepozorný programátor přidává nový typ miniatury s rozměry, které jsou již definovány, s jiným názvem a vzniká chaous.