gerardtoko / imagine-bundle
此插件辅助使用 imagine 库进行图片处理
Requires
- php: >=5.3.2
- imagine/imagine: 0.4.*
- symfony/filesystem: >=2.0.16,<2.3-dev
- symfony/finder: >=2.0.16,<2.3-dev
- symfony/framework-bundle: >=2.0.16,<2.3-dev
Requires (Dev)
- symfony/yaml: >=2.0.16,<2.3-dev
- twig/twig: >=1.0,<2.0-dev
Suggests
- twig/twig: >=1.0,<2.0-dev
This package is not auto-updated.
Last update: 2024-09-23 12:11:34 UTC
README
使用 imagine 库进行图片处理的 Symfony2 插件 (LiipImagineBundle 的分支)
这个插件是 LiipImagineBundle 的分支,为 Symfony2 提供了简单的图片处理支持。分支的目的是提高代码的性能处理。
例如,使用此插件可以实现以下功能
<img src="{{ '/relative/path/to/image.jpg' | imagine_filter('thumbnail') }}" />
这将执行名为 thumbnail
的转换,您可以定义它执行多种不同的操作,例如调整大小、裁剪、绘制、蒙版等。
此插件集成了独立的 PHP "Imagine 库"。
安装
使用 composer 下载 GTImagineBundle
在 composer.json 中添加 GTImagineBundle
{ "require": { "gerardtoko/imagine-bundle": "dev-master" } }
现在运行以下命令让 composer 下载插件
$ php composer.phar update gerardtoko/imagine-bundle
Composer 会将插件安装到您的项目目录 vendor/gerardtoko/imagine-bundle
。
注册插件
您必须在 kernel 中注册插件
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new GT\ImagineBundle\GTImagineBundle(), ); // ... }
配置
配置 yml 文件的示例
parameters: web_root: %kernel.root_dir%/../web web_media: %kernel.root_dir%/../web/medias gt_imagine: driver: gd mkdir_mode: 0777 formats: [jpg, png] web_root: %web_root% data_root: %web_media%/thumbnails filter_sets: cover: directory: %web_media%/images/cover quality: 75 filters: thumbnail: { size: [140, 200], mode: outbound } crop: { start: [0, 0], size: [140, 200] } profile: directory: %web_media%/images/profile quality: 75 filters: thumbnail: { size: [50, 50], mode: outbound } crop: { start: [0, 0], size: [50, 50] }
基本用法
此插件通过配置一系列过滤器并将这些过滤器应用于模板中的图片来工作。因此,首先创建一些需要应用在应用程序中某处的过滤器。例如,假设您想将图片缩放到 120x90 像素的大小
# app/config/config.yml gt_imagine: filter_sets: my_thumb: directory: %web_media%/images filters: thumbnail: { size: [120, 90], mode: outbound }
您已定义了一个名为 my_thumb
的过滤器集,它执行缩略图转换。我们将在后面了解更多关于可用的转换,但现在,这个新的过滤器可以立即在模板中使用
<img src="{{ '/relative/path/to/image.jpg' | imagine_filter('my_thumb') }}" />
或者如果您使用的是 PHP 模板
<img src="<?php $this['imagine']->filter('/relative/path/to/image.jpg', 'my_thumb') ?>" />
在幕后,插件将在第一次请求时应用过滤器到图片上,并将图片缓存到类似路径。在下一次请求中,缓存的图片将直接从文件系统中提供。
在这个例子中,最终渲染的路径可能是 /media/my_thumb/relative/path/to/image.jpg
。这是 Imagine 将保存过滤后的图片文件的位置。
过滤器
GTImagineBundle 提供了一套内置过滤器。
有几个配置选项可用
-
data_root
- 可以设置为原始图片目录的绝对路径。此选项允许您将原始图片存储在 Web 根目录之外的不同位置。在此根目录下,将在 apply_filter 模板过滤器中指定的相对路径中查找图片。默认:
%kernel.root_dir%/../web/thumbnails
-
web_root
- 必须是您应用程序 Web 根目录的绝对路径。这用于确定生成图片文件的存放位置,以便 Apache 在下次请求时在将请求交给 Symfony2 之前先获取它们。默认:
%kernel.root_dir%/../web
-
driver
- 三个驱动程序之一:gd
、imagick
、gmagick
默认:
gd
-
filters
- 指定要定义和使用的过滤器
您指定的每个过滤器都有以下选项
options
- 应传递给特定过滤器类型的功能
内置过滤器
目前,此插件仅包含一个内置过滤器:thumbnail
。
缩略图
如名称所示,thumbnail
过滤器对您的图像执行缩略图转换。配置如下所示
filters: my_thumb: thumbnail: { size: [120, 90], mode: outbound }
mode
可以是 outbound
或 inset
。
调整大小
resize
过滤器可以用来简单地改变图像的宽度和高度,而不考虑其比例。
考虑以下配置示例,它定义了两个过滤器以将图像调整为确切的屏幕分辨率
gt_imagine: filters: cga: resize: { size: [320, 200] } wuxga: resize: { size: [1920, 1200] }
相对调整大小
relative_resize
过滤器可以用来根据现有尺寸对图像进行 heighten
(增加高度)、widen
(增加宽度)、increase
(增加)或 scale
(缩放)。这些选项直接对应于 Imagine 的 BoxInterface
上的方法。
给定一个大小为 50x40(宽度,高度)的输入图像,考虑以下注释的配置示例
gt_imagine: filters: heighten: relative_resize: { heighten: 60 } # Transforms 50x40 to 75x60 widen: relative_resize: { widen: 32 } # Transforms 50x40 to 40x32 increase: relative_resize: { increase: 10 } # Transforms 50x40 to 60x50 scale: relative_resize: { scale: 2.5 } # Transforms 50x40 to 125x100
如果您喜欢在 Imagine 中不使用过滤器配置,可以直接使用 RelativeResize
类。
在控制器中使用 GTImagineBundle
如果您需要在控制器中使用过滤器,只需加载 gt_imagine
服务。
class MyController extends Controller { public function indexAction() { $imagine = $container->get('gt_imagine'); $srcPath = $imagine->filter("image.jpg", "my_thumb"); //filter All $imagine->removeAll("my_thumb"); $imagine->filterAll("my_thumb"); // .. } }
使用命令
如果您需要在控制台中使用过滤器,只需执行
gt:imagine:dump:all Apply a filter on all images
gt:imagine:dump:filter Apply a filter on images group
gt:imagine:dump:image Apply a filter on an image
gt:imagine:remove:all remove all images filtered
gt:imagine:remove:filter remove a images group filtered
gt:imagine:remove:image remove an image filtered