webchemistry / images
Image storage for easier uploading, deleting and manipulation.
Installs: 33 711
Dependents: 2
Suggesters: 1
Security: 0
Stars: 37
Watchers: 9
Forks: 16
Open Issues: 0
Requires
- php: ^7.2
- nette/finder: ^2.5
- nette/http: ^3.0
- nette/utils: ^3.0
- tracy/tracy: ^2.6
Requires (Dev)
- codeception/codeception: ^2.4
- doctrine/orm: ^2.6
- latte/latte: ^2.5
- nette/application: ^3.0
- nette/di: ^3.0
- nette/forms: ^3.0
- nettrine/hydrator: dev-master
- phpstan/phpstan: ^0.11
- webchemistry/testing-helpers: ~2.0
Suggests
- webchemistry/images-s3: To save an image on Amazon
This package is auto-updated.
Last update: 2021-05-20 09:51:49 UTC
README
Deprecated
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ší.
Instalace
Composer:
composer require webchemistry/images
config:
extensions: images: WebChemistry\Images\DI\ImagesExtension
Konfigurace
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
Skladba cesty k obrázků
%wwwDir%/%assetsDir%/namespace/resize/image.png %wwwDir%/%assetsDir%/namespace/original/image.png
namespace/ - Má na starosti třída namespaceResolver resize/ - Má na starosti třída hashResolver
Tvorba aliasů
Aliasy umožnují snadnou modifikací obrazků
Použití jednoho modifieru
local: aliases: myAlias: "resize:12,50"
Více modifierů
local: aliases: myAlias: "resize:12,50,exact|sharpen"
Použití polí
cloudinary: aliases: myAlias: "border:[width: 4, color: #553311]"
Použití proměnných
local: aliases: resizeExact: "resize:$1,$2,exact" resize: "resize:$1,$2,$3" resizeSquare: "resize:$1,$1,exact"
Vlastní modifiery
V konfiguraci stačí zaregistrovat loader
local: modifiers: - ModifiersLoader
vytvořit třídu a přidávat modifiery
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í
local: aliases: custom: "custom:param1"
Ukladaní obrázků
$upload - Instance Nette\Utils\Upload $location - Cesta obrázku uložená v řetězci $storage - Instance WebChemistry\Images\IImageStorage
Nette upload
// 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
$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
Získávání obrázků
$id Identifikátor ziskány z uloženeho obrázku viz sekce ukládání obrázků
$resource = $storage->createResource($id); $link = $storage->link($resource);
Kopírování obrázků
$id Identifikátor ziskány z uloženeho obrázku viz sekce ukládání obrázků
$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.
Přesouvání obrázků
$id Identifikátor ziskány z uloženeho obrázku viz sekce ukládání obrázků
$resource = $storage->createResource($id); $dest = $storage->createResource("namespace/obrazek.jpg"); // Muzeme zmodifikovat $dest->setAlias("custom"); $storage->move($resource, $dest);
Odstranění obrázků
$id Identifikátor ziskány z uloženeho obrázku viz sekce ukládání obrázků
$resource = $storage->createResource($id); $storage->delete($id);
Odstraní se jak originální obrázek, tak i jeho modifikace.
Modifikace obrázků
$id Identifikátor ziskány z uloženeho obrázku viz sekce ukládání obrázků
- Uložením
$resource = $storage->createResource($id); $resource->setAlias("custom"); $storage->save($resource);
Uloží se do namespace/custom/obrazek.jpg
- Získáním adresy
$resource = $storage->createResource($id); $resource->setAlias("custom"); echo $storage->link($resource);
Uloží se do namespace/custom/obrazek.jpg
Šablony
Zobrazení obrázku
{img 'image.jpg'} <img n:img="'image.jpg'">
Zobrazení s použitím modifikátorů obrázků
{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)}
Dávkování obrázků
$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();
Formuláře
Automatickou registraci provede extenze. S touto komponentou odpadá povinnost vytvoření třídy pro obrázek.
$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ů:
$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(); } };
Doctrine typ
Automatickou registraci provede extenze. Položku pro obrázek lze vytvořit přes anotaci typ image:
class Entity { /** * @ORM\Column(type="image") */ protected $image; }
nullable=true změna obrázku z povinného na nepovinný
Uložení nového obrázku, bere jen instaci IFileStorage nebo NULL v případě nastaveného nullable v anotaci Column
$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
$en = $this->em->getRepository(Entity::class)->find(1); if ($en->image !== NULL) { // V pripade nullable $link = $this->storage->link($en->image); }