tomaj / nette-images
图片库。
Requires
- php: >=5.3.3
- nette/nette: ~2.2
This package is not auto-updated.
Last update: 2024-09-24 02:11:38 UTC
README
特别库,用于处理图片。允许将图片保存到不同的存储和结构中。同样,可以直接为图片创建缩略图。
安装
最好通过composer安装
composer require tomaj/nette-images
配置
为了运行,需要注册和设置我们想要使用的后端。后端需要注册为nette服务。使用经典文件后端:fileBackend: Tomaj\Image\Backend\FileBackend('uploads/images/')
或者可以使用S3后端 s3Backend: Tomaj\Image\Backend\S3Backend('replace-acces-key-id', 'replace-secret-key-id', 'bucket-name', 'eu-west-1', 'bucketname.s3-eu-west-1.amazonaws.com')
。需要根据我们想要在S3上存储图片的位置来修改设置
完整的配置可能如下所示
fileBackend: Tomaj\Image\Backend\FileBackend('uploads/')
userImage: Tomaj\Image\ImageService(@fileBackend, 'avatar/:year/:month/:day/:hash', '/tmp', ['10x10', '320x200', '640x360'])
应用程序可以包含多个服务实例 ImageService,其中每个都可以使用不同的后端和图片大小
为了在模板中运行帮助,需要在presenter中注册它
$context = $this->context;
$this->template->registerHelper('thumb', function($identifier, $type, $size = '') use ($context) {
$imageService = $context->getService($type . 'Image');
return \Tomaj\Image\Helper\Image::thumb($imageService, $identifier, $size);
});
使用
使用分为两部分 - 添加图片和创建图片链接。
上传
可以通过以下函数在代码中添加新图片
$itemImage = $this->context->getService('itemImage')
$identifier = $itemImage->store('cesta k obrazku', 'meno vysledneho obrazku');
此 $identifier 由store()方法返回,需要保存以便再次获取图片
可以直接从nette表单添加新图片
TODO
生成缩略图
为了创建缩略图,需要存储图片后ImageService返回的值。示例可能如下所示
$itemImage = $this->context->getService('itemImage')
$thumbUrl = $itemImage->url($identifier, '320x200');
// alebo pre povodny obrazok
$orginalUrl = $itemImage->url($identifier);
注意:如果无法创建缩放,则将创建指向不存在资源的链接,除非后端直接处理此错误。
也可以直接在模板中使用helper生成缩略图(需要注册,如前所述)
<img src="{$identifier|thumb:'item','320x200'}" alt="moj zmenseny obrazok" />
在此使用中,非常重要地指定了第二个参数(字符串),该参数用于使用正确的 ImageService - 项目中可能有多个。通过依赖注入创建将使用该服务的服务的名称 - 此行为可以在应用程序中更改,而不是库的一部分(实现是在注册helper时更改的)
不同的缩略图类型 对于缩略图,可以使用不同的预设,根据预设使用图片。配置如下
userImage: Tomaj\Image\ImageService(@fileBackend, 'avatar/:year/:month/:day/:hash', '/tmp', ['10x10_FILL', '320x200_EXACT', '640x360_SHRINK_ONLY'])
名称和功能与nette文档中的图片功能完全相同。 http://doc.nette.org/cs/2.1/images 默认使用预设 EXACT。
生成新大小或重新生成缩略图
要生成新大小,image服务中存在一个名为regenerateThumb的函数。只需调用它,并提供我们拥有的标识符,即可生成新的缩略图。使用可能如下所示
$promoImageService = $container->getService('promoImage');
foreach ($container->getService('promoRepository')->findAll() as $promo) {
$promoImageService->regenerateThumb($promo->image, '20x20');
}
扩展 - 添加新后端
为了添加更多后端,只需实现 Tomaj\Image\Backend\BackendInterface 接口。所有必要的信息都可以直接从该接口及其 FileBackend 和 S3Backend 实现的注释中获取
TODO - 还有哪些需要改进的
- 目前,所有缩略图都永久生成为 .jpg
- 需要添加从后端删除图片和在后端编辑图片的功能