dev-master
9999999-devImage storage for Nette Framework
GPL-3.0 BSD-3-Clause GPL-2.0
The Requires
The Development Requires
by Jan Brabec
by Milan Matějček
nette images
Image storage for Nette Framework
Tento balíček se už dále vyvíjet nebude, budou maximálně opravy chyb. Použijte proto velmi podobný balíček https://github.com/contributte/imagist, který je bohatější., (*2)
Composer:, (*3)
composer require webchemistry/images
config:, (*4)
extensions: images: WebChemistry\Images\DI\ImagesExtension
enable: yes defaultImage: null wwwDir: %wwwDir% assetsDir: assets modifiers: [] aliases: [] hashResolver: WebChemistry\Images\Resolvers\HashResolver ## Vysvětleno níže namespaceResolver: WebChemistry\Images\Resolvers\NamespaceResolver ## Vysvětleno níže registerControl: yes ## Zaregistruje UploadControl registerType: yes ## Zaregistruje doctrine typ 'image' safeLink: %productionMode% ## metoda link() se zotavuje z chyb a loguje tyto chyby do tracy, web nespadne do 500 kvůli chybnému obrázku
%wwwDir%/%assetsDir%/namespace/resize/image.png %wwwDir%/%assetsDir%/namespace/original/image.png, (*5)
namespace/ - Má na starosti třída namespaceResolver resize/ - Má na starosti třída hashResolver, (*6)
Aliasy umožnují snadnou modifikací obrazků, (*7)
Použití jednoho modifieru, (*8)
local: aliases: myAlias: "resize:12,50"
Více modifierů, (*9)
local: aliases: myAlias: "resize:12,50,exact|sharpen"
Použití polí, (*10)
cloudinary: aliases: myAlias: "border:[width: 4, color: #553311]"
Použití proměnných, (*11)
local: aliases: resizeExact: "resize:$1,$2,exact" resize: "resize:$1,$2,$3" resizeSquare: "resize:$1,$1,exact"
V konfiguraci stačí zaregistrovat loader, (*12)
local: modifiers: - ModifiersLoader
vytvořit třídu a přidávat modifiery, (*13)
class ModifiersLoader implements WebChemistry\Images\Modifiers\ILoader { public function load(WebChemistry\Images\Modifiers\ModifierContainer $modifierContainer) { $modifierContainer->addModifier('custom', function (ModifierParam $param, $foo) { // zpracovani obrazku $param->getImage() }); } }
a použití, (*14)
local: aliases: custom: "custom:param1"
$upload - Instance Nette\Utils\Upload $location - Cesta obrázku uložená v řetězci $storage - Instance WebChemistry\Images\IImageStorage, (*15)
Nette upload, (*16)
// vytvorime zdroj pro obrazek $resource = $storage->createUploadResource($upload); // nebo z cesty $resource = $storage->createLocalResource($location); // pridame namespace $resource->setNamespace('namespace'); // ulozime $result = $storage->save($resource); // zobrazime url adresu echo $storage->link($result);
Před nahráním obrázku ho můžeme upravit, (*17)
$resource->setAlias("custom"); // Kombinace více aliasů $resource->setAliases(["custom", "custom2"]); $id = $resource->getId(); // Ziskání id // nebo $id = (string) $resource;
Obrázek se uloží v namespace/original/obrazek.jpg, (*18)
$id Identifikátor ziskány z uloženeho obrázku viz sekce ukládání obrázků, (*19)
$resource = $storage->createResource($id); $link = $storage->link($resource);
$id Identifikátor ziskány z uloženeho obrázku viz sekce ukládání obrázků, (*20)
$resource = $storage->createResource($id); $dest = $storage->createResource("namespace/obrazek.jpg"); // Muzeme zmodifikovat $dest->setAlias("custom"); $storage->copy($resource, $dest);
Zkopíruje se jen originální obrázek a v případně se zmodifikuje., (*21)
$id Identifikátor ziskány z uloženeho obrázku viz sekce ukládání obrázků, (*22)
$resource = $storage->createResource($id); $dest = $storage->createResource("namespace/obrazek.jpg"); // Muzeme zmodifikovat $dest->setAlias("custom"); $storage->move($resource, $dest);
$id Identifikátor ziskány z uloženeho obrázku viz sekce ukládání obrázků, (*23)
$resource = $storage->createResource($id); $storage->delete($id);
Odstraní se jak originální obrázek, tak i jeho modifikace., (*24)
$id Identifikátor ziskány z uloženeho obrázku viz sekce ukládání obrázků, (*25)
1) Uložením, (*26)
$resource = $storage->createResource($id); $resource->setAlias("custom"); $storage->save($resource);
Uloží se do namespace/custom/obrazek.jpg, (*27)
2) Získáním adresy, (*28)
$resource = $storage->createResource($id); $resource->setAlias("custom"); echo $storage->link($resource);
Uloží se do namespace/custom/obrazek.jpg, (*29)
Zobrazení obrázku, (*30)
{img 'image.jpg'} <img n:img="'image.jpg'">
Zobrazení s použitím modifikátorů obrázků, (*31)
{img 'image.jpg', custom} <img n:img="'image.jpg', custom"> {* Kombinace dvou aliasů *} {img image.jpg, custom, custom1} {* Použití proměnných v aliasu *} {img $resource, customVariables(15,15,exact)}
$batch = $storage->createBatch(); $entity->image = $batch->save($resource); $this->em->persist($entity); $entity2->image = $batch->save($resource2); $this->em->persist($entity2); $batch->flush(); $this->em->flush();
Automatickou registraci provede extenze. S touto komponentou odpadá povinnost vytvoření třídy pro obrázek., (*32)
$form->addImageUpload('image', 'Obrazek') ->setRequired() ->setNamespace('namespace'); $form->onSuccess[] = function ($form, array $values) use ($storage) { $storage->save($values['image']); };
Pro náhledový obrázek a input pro odstranění obrázků:, (*33)
$form->addImageUpload('image', 'Obrázek') ->setDelete('Odstranit obrázek') ->setNamespace('namespace'); $form->onSuccess[] = function ($form, array $values) use ($storage) { $image = $values['image']; if ($image->getDelete()) { $storage->delete($image->getDelete()); } if ($image->getUpload()) { $resource = $storage->save($image->getUpload()); } else { $resource = $image->getDefaultValue(); } };
Automatickou registraci provede extenze. Položku pro obrázek lze vytvořit přes anotaci typ image:, (*34)
class Entity { /** * @ORM\Column(type="image") */ protected $image; }
nullable=true změna obrázku z povinného na nepovinný, (*35)
Uložení nového obrázku, bere jen instaci IFileStorage nebo NULL v případě nastaveného nullable v anotaci Column, (*36)
$form->onSuccess[] = function ($form, $values) { $en = new Entity(); $en->image = $this->storage->save($values->image); $this->em->persist($en); $this->em->flush(); };
Získání obrázku, (*37)
$en = $this->em->getRepository(Entity::class)->find(1); if ($en->image !== NULL) { // V pripade nullable $link = $this->storage->link($en->image); }
Image storage for Nette Framework
GPL-3.0 BSD-3-Clause GPL-2.0
nette images