此包已废弃且不再维护。作者建议使用contributte/imagist包。

用于更容易上传、删除和操作图片的图片存储。

4.2.0 2021-05-20 09:49 UTC

README

Build Status

已弃用

此包将不再开发,最多只修复错误。因此,请使用非常相似的包https://github.com/contributte/imagist,它更加丰富。

安装

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/ - 由namespaceResolver类处理 resize/ - 由hashResolver类处理

创建别名

别名允许轻松修改图片

使用单个修饰符

local:
    aliases:
      myAlias: "resize:12,50"

多个修饰符

local:
    aliases:
      myAlias: "resize:12,50,exact|sharpen"

使用数组

cloudinary:
    aliases:
      myAlias: "border:[width: 4, color: #553311]"

使用变量

local:
    aliases:
      resizeExact: "resize:$1,$2,exact"
      resize: "resize:$1,$2,$3"
      resizeSquare: "resize:$1,$1,exact"

自定义修饰符

在配置中只需要注册loader

local:
    modifiers:
      - ModifiersLoader

创建类并添加修饰符

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()
        });
    }

}

并使用

local:
    aliases:
      custom: "custom:param1"

图片存储

$upload - Nette\Utils\Upload 实例 $location - 存储在字符串中的图片路径 $storage - WebChemistry\Images\IImageStorage 实例

Nette 上传

// 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);

在上传图片之前,我们可以对其进行修改

$resource->setAlias("custom");

// Kombinace více aliasů
$resource->setAliases(["custom", "custom2"]);

$id = $resource->getId(); // Ziskání id
// nebo
$id = (string) $resource;

图片将存储在namespace/original/obrazek.jpg

获取图片

$id 从存储的图片中获取的标识符,请参阅存储图片部分

$resource = $storage->createResource($id);

$link = $storage->link($resource);

复制图片

$id 从存储的图片中获取的标识符,请参阅存储图片部分

$resource = $storage->createResource($id);
$dest = $storage->createResource("namespace/obrazek.jpg"); 

// Muzeme zmodifikovat
$dest->setAlias("custom");

$storage->copy($resource, $dest);

仅复制原始图片,并在必要时对其进行修改。

移动图片

$id 从存储的图片中获取的标识符,请参阅存储图片部分

$resource = $storage->createResource($id);
$dest = $storage->createResource("namespace/obrazek.jpg"); 

// Muzeme zmodifikovat
$dest->setAlias("custom");

$storage->move($resource, $dest);

删除图片

$id 从存储的图片中获取的标识符,请参阅存储图片部分

$resource = $storage->createResource($id);

$storage->delete($id);

将删除原始图片及其修改版本。

修改图片

$id 从存储的图片中获取的标识符,请参阅存储图片部分

  1. 通过存储
$resource = $storage->createResource($id);
$resource->setAlias("custom");
$storage->save($resource);

存储到namespace/custom/obrazek.jpg

  1. 通过获取地址
$resource = $storage->createResource($id);
$resource->setAlias("custom");
echo $storage->link($resource);

存储到namespace/custom/obrazek.jpg

模板

显示图片

{img 'image.jpg'}
<img n:img="'image.jpg'">

使用图片修饰符显示

{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();

表单

扩展将自动注册。使用此组件无需创建图像类。

$form->addImageUpload('image', 'Obrazek')
    ->setRequired()
    ->setNamespace('namespace');

$form->onSuccess[] = function ($form, array $values) use ($storage) {
    $storage->save($values['image']);
};    

用于预览图片和删除图片的输入

$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 类型

扩展将自动注册。可以通过注解类型 image 创建图片字段。

class Entity {
    
    /**
     * @ORM\Column(type="image")
     */
    protected $image;

}

nullable=true 将图片从必填改为非必填

保存新图片,仅接受IFileStorage实例或当Column注解中设置了nullable时接受NULL

$form->onSuccess[] = function ($form, $values) {
    $en = new Entity();
    $en->image = $this->storage->save($values->image);
    
    $this->em->persist($en);
    $this->em->flush();
};

获取图片

$en = $this->em->getRepository(Entity::class)->find(1);
if ($en->image !== NULL) { // V pripade nullable
    $link = $this->storage->link($en->image);
}