gerardtoko/imagine-bundle

此插件辅助使用 imagine 库进行图片处理

安装: 9

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

类型:symfony-bundle

dev-master 2013-02-26 14:13 UTC

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 - 三个驱动程序之一:gdimagickgmagick

    默认: gd

  • filters - 指定要定义和使用的过滤器

您指定的每个过滤器都有以下选项

  • options - 应传递给特定过滤器类型的功能

内置过滤器

目前,此插件仅包含一个内置过滤器:thumbnail

缩略图

如名称所示,thumbnail 过滤器对您的图像执行缩略图转换。配置如下所示

filters:
    my_thumb:
        thumbnail: { size: [120, 90], mode: outbound }

mode 可以是 outboundinset

调整大小

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