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ší.
Composer:
composer require webchemistry/images
config:
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
namespace/ - Má na starosti třída namespaceResolver resize/ - Má na starosti třída hashResolver
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"
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"
$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
$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);
$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.
$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);
$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.
$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
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)}
$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.
$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();
}
};
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);
}