liip / imagine-bundle
此包为基于 Symfony 的项目提供了一个图像操作抽象工具包。
Requires
- php: ^7.2|^8.0
- ext-mbstring: *
- imagine/imagine: ^1.3.2
- symfony/filesystem: ^3.4|^4.4|^5.3|^6.0|^7.0
- symfony/finder: ^3.4|^4.4|^5.3|^6.0|^7.0
- symfony/framework-bundle: ^3.4.23|^4.4|^5.3|^6.0|^7.0
- symfony/mime: ^4.4|^5.3|^6.0|^7.0
- symfony/options-resolver: ^3.4|^4.4|^5.3|^6.0|^7.0
- symfony/process: ^3.4|^4.4|^5.3|^6.0|^7.0
- twig/twig: ^1.44|^2.9|^3.0
Requires (Dev)
- ext-gd: *
- amazonwebservices/aws-sdk-for-php: ^1.0
- aws/aws-sdk-php: ^2.4|^3.0
- doctrine/cache: ^1.11|^2.0
- doctrine/persistence: ^1.3|^2.0
- enqueue/enqueue-bundle: ^0.9|^0.10
- league/flysystem: ^1.0|^2.0|^3.0
- phpstan/phpstan: ^1.10.0
- psr/cache: ^1.0|^2.0|^3.0
- psr/log: ^1.0
- symfony/asset: ^3.4|^4.4|^5.3|^6.0|^7.0
- symfony/browser-kit: ^3.4|^4.4|^5.3|^6.0|^7.0
- symfony/cache: ^3.4|^4.4|^5.3|^6.0|^7.0
- symfony/console: ^3.4|^4.4|^5.3|^6.0|^7.0
- symfony/dependency-injection: ^3.4|^4.4|^5.3|^6.0|^7.0
- symfony/form: ^3.4|^4.4|^5.3|^6.0|^7.0
- symfony/messenger: ^4.4|^5.3|^6.0|^7.0
- symfony/phpunit-bridge: ^7.0.2
- symfony/templating: ^3.4|^4.4|^5.3|^6.0
- symfony/validator: ^3.4|^4.4|^5.3|^6.0|^7.0
- symfony/yaml: ^3.4|^4.4|^5.3|^6.0|^7.0
Suggests
- ext-exif: required to read EXIF metadata from images
- ext-gd: required to use gd driver
- ext-gmagick: required to use gmagick driver
- ext-imagick: required to use imagick driver
- ext-json: required to read JSON manifest versioning
- ext-mongodb: required for mongodb components
- alcaeus/mongo-php-adapter: required for mongodb components
- amazonwebservices/aws-sdk-for-php: required to use AWS version 1 cache resolver
- aws/aws-sdk-php: required to use AWS version 2/3 cache resolver
- doctrine/mongodb-odm: required to use mongodb-backed doctrine components
- enqueue/enqueue-bundle: ^0.9 add if you like to process images in background
- league/flysystem: required to use FlySystem data loader or cache resolver
- monolog/monolog: A psr/log compatible logger is required to enable logging
- rokka/imagine-vips: required to use 'vips' driver
- symfony/asset: If you want to use asset versioning
- symfony/messenger: If you like to process images in background
- symfony/templating: required to use deprecated Templating component instead of Twig
- 3.x-dev
- 2.x-dev
- 2.13.2
- 2.13.1
- 2.13.0
- 2.12.3
- 2.12.2
- 2.12.1
- 2.12.0
- 2.11.0
- 2.10.0
- 2.9.0
- 2.8.0
- 2.7.6
- 2.7.5
- 2.7.4
- 2.7.3
- 2.7.2
- 2.7.1
- 2.7.0
- 2.6.1
- 2.6.0
- 2.5.0
- 2.4.0
- 2.3.1
- 2.3.0
- 2.2.0
- 2.1.0
- 2.0.0
- 1.x-dev
- 1.9.1
- 1.9.0
- 1.8.0
- 1.7.4
- 1.7.3
- 1.7.2
- 1.7.1
- 1.7.0
- 1.6.0
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.7
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.1
- 1.1.0
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 1.0.0-alpha7
- 1.0.0-alpha6
- 1.0.0-alpha5
- 1.0.0-alpha4
- 1.0.0-alpha3
- 1.0.0-alpha2
- 1.0.0-alpha1
- v0.21.1
- v0.21.0
- v0.20.2
- v0.20.1
- v0.20.0
- v0.19.0
- v0.18.0
- v0.17.1
- v0.17.0
- v0.16.0
- v0.15.1
- v0.15.0
- v0.14.0
- v0.13.0
- v0.12.0
- v0.11.1
- v0.11.0
- v0.10.1
- v0.10.0
- v0.9.4
- v0.9.3
- v0.9.2
- v0.9.1
- v0.9.0
- dev-2-to-3
- dev-cs-fix
- dev-new-architecture
- dev-refactor
This package is auto-updated.
Last update: 2024-09-04 13:33:34 UTC
README
此包为基于 Symfony 的项目提供了一个图像操作抽象工具包。
概述
-
过滤器集合:使用任何 Symfony 支持的配置语言(如 YML 和 XML),您可以创建指定转换例程的 过滤器集合 定义。这些定义包括一系列 过滤器 和 后处理器,以及其他可选参数。
-
过滤器:使用 过滤器 应用图像转换。该包提供了一系列 内置过滤器,实现最常见的转换;例如 缩略图、缩放、裁剪、翻转、去除 和 水印。对于更复杂的转换,您可以轻松创建自己的 自定义过滤器。
-
后处理器:由 后处理器 处理由 过滤器 生成的结果二进制图像文件的修改。例如 JPEG Optim、Moz JPEG、Opti PNG 和 PNG Quant。就像过滤器一样,您可以轻松创建自己的 自定义后处理器。
示例
假设您定义了一个 my_thumb
过滤器集合,它可以配置为执行任何数量的不同转换。最简单的调用是将图像路径通过提供的 imagine_filter
Twig 过滤器。
<img src="{{ asset('/relative/path/to/image.jpg') | imagine_filter('my_thumb') }}" />
贡献者行为准则
该项目遵循 贡献者行为准则。通过参与此项目,您同意遵守其条款。
归属
-
感谢众多 贡献者 为此项目投入了时间和代码。
-
本捆绑包使用独立PHP Imagine库 进行图像转换。
-
此包是从 AvalancheImagineBundle 分支出来的,目的是使代码更易于扩展。有关分支理由的更多信息,请参考 AvalancheImagineBundle#25。
设置
安装
使用此包与所有Symfony捆绑包类似。必须执行以下步骤
详细的设置说明可以在文档的 安装 章节中找到。
配置
所有可用配置选项的详细信息可以在文档的 配置 章节中找到。
使用入门
通常,此捆绑包通过在模板内部应用 过滤器集 来工作。您的 过滤器集 在应用程序的配置文件(通常是 app/config/config.yml
)中定义,由一系列 过滤器、后处理器 和其他可选参数组成。
我们将在稍后了解更多关于 后处理器 和其他可用参数的信息,但现在是时候关注如何定义一个简单的由几个 过滤器 组成的 过滤器集 了。
创建缩略图
在我们开始之前,需要一些小的配置来确保我们的 数据加载器 和 缓存解析器 正确运行。在您的配置文件中使用以下样板代码。
# app/config/config.yml liip_imagine : # configure resolvers resolvers : # setup the default resolver default : # use the default web path web_path : ~ # your filter sets are defined here filter_sets : # use the default cache configuration cache : ~
基本配置就绪后,我们将从一个示例开始,该示例满足了常见的用例:创建缩略图。假设我们希望将以下转换应用于生成的缩略图
- 将图像缩放并裁剪为120x90px。
- 在缩放后的图像上添加2px黑色边框。
- 调整图像质量为75。
在上述样板代码的基础上,我们需要定义一个名为 my_thumb
的 过滤器集,其中配置了两个 过滤器:即 thumbnail
和 background
过滤器。
# app/config/config.yml liip_imagine : resolvers : default : web_path : ~ filter_sets : cache : ~ # the name of the "filter set" my_thumb : # adjust the image quality to 75% quality : 75 # list of transformations to apply (the "filters") filters : # create a thumbnail: set size to 120x90 and use the "outbound" mode # to crop the image when the size ratio of the input differs thumbnail : { size : [120, 90], mode : outbound } # create a 2px black border: center the thumbnail on a black background # 4px larger to create a 2px border around the final image background : { size : [124, 94], position : center, color : '#000000' }
您现在创建了一个名为 my_thumb
的 过滤器集,它可以执行缩略图转换。该 thumbnail
过滤器将图像调整到所需的宽度和高度(在本例中为120x90px),其 mode: outbound
选项导致如果输入比例不同,则结果图像被裁剪。而 background
过滤器通过创建一个124x94px大小的黑色画布,并将缩略图放置在其中心,从而实现2px黑色边框。
注意: 一个 过滤器集 可以定义任意数量的 过滤器。简单的转换可能只需要一个 过滤器,而复杂的转换可以定义无限数量的 过滤器。
有多个额外的 过滤器,但现在您可以在模板中使用您刚刚定义的 my_thumb
过滤器集。
对于基于Twig的模板,使用
<img src="{{ asset('/relative/path/to/image.jpg') | imagine_filter('my_thumb') }}" />
或者,对于基于PHP的模板,使用
<img src="<?php $this['imagine']->filter('/relative/path/to/image.jpg', 'my_thumb') ?>" />
幕后,当第一次请求页面时,捆绑包会即时将过滤器应用于图像。然后,转换后的图像将缓存以便于后续请求。最终的缓存图像路径将类似于 /media/cache/my_thumb/relative/path/to/image.jpg
。
注意: 使用 dev
环境时,您可能会发现图像无法通过模板助手正确渲染。这通常是由于在应用程序配置中启用了 intercept_redirect
。为了确保图像可以渲染,强烈建议禁用此选项。
# app/config/config_dev.yml web_profiler : intercept_redirects : false
运行时选项
有时,您可能已定义了一个过滤器,它可以满足99%的使用场景。您不必为错误的1%的场景定义一个新的过滤器,而是可以通过传递选项数组来在运行时改变过滤器的行为。
对于基于Twig的模板,使用
{% set runtimeConfig = {"thumbnail": {"size": [50, 50] }} %} <img src="{{ asset('/relative/path/to/image.jpg') | imagine_filter('my_thumb', runtimeConfig) }}" />
或者,对于基于PHP的模板,使用
<?php $runtimeConfig = array( "thumbnail" => array( "size" => array(50, 50) ) ); ?> <img src="<?php $this['imagine']->filter('/relative/path/to/image.jpg', 'my_thumb', $runtimeConfig) ?>" />
路径解析
有时您需要解析由该组件返回的筛选图像的图像路径。您可以使用Symfony的控制台二进制文件或从控制器或其他代码中程序化地轻松实现这一点。
使用控制台解析
您可以使用控制台命令 liip:imagine:cache:resolve
解析图像URL。唯一必需的参数是一个或多个相对图像路径(必须用空格分隔)。
$ php bin/console liip:imagine:cache:resolve relative/path/to/image1.jpg relative/path/to/image2.jpg
此外,您可以使用 --filter
选项指定要解析的过滤器(如果省略了 --filter
选项,则解析所有可用的过滤器)。
$ php bin/console liip:imagine:cache:resolve relative/path/to/image1.jpg --filter=my_thumb
程序化解析
您可以使用 liip_imagine.cache.manager
服务中的 getBrowserPath
方法在您的代码中解析图像URL。假设您已经将服务分配给一个名为 $imagineCacheManager
的变量,您将执行以下操作:
$imagineCacheManager->getBrowserPath('/relative/path/to/image.jpg', 'my_thumb');
通常,您需要在控制器中执行此操作。假设您的控制器继承自基Symfony控制器,您可以利用继承的 get
方法请求 liip_imagine.cache.manager
服务,然后可以调用相对图像路径的 getBrowserPath
来获取其解析位置。
/** @var CacheManager */ $imagineCacheManager = $this->get('liip_imagine.cache.manager'); /** @var string */ $resolvedPath = $imagineCacheManager->getBrowserPath('/relative/path/to/image.jpg', 'my_thumb');
过滤器
此组件提供了一套内置过滤器,您也可以轻松定义自己的过滤器。请参阅我们的文档中的 过滤器章节。
作为服务使用
如果您需要在控制器中使用您定义的“过滤器集”,您可以从服务容器中获取此组件的FilterService来为您完成繁重的工作。
<?php class MyController extends Controller { public function indexAction() { /** @var FilterService */ $imagine = $this ->container ->get('liip_imagine.service.filter'); // 1) Simple filter, OR $resourcePath = $imagine->getUrlOfFilteredImage('uploads/foo.jpg', 'my_thumb'); // 2) Runtime configuration $runtimeConfig = [ 'thumbnail' => [ 'size' => [200, 200] ], ]; $resourcePath = $imagine->getUrlOfFilteredImageWithRuntimeFilters( 'uploads/foo.jpg', 'my_thumb', $runtimeConfig ); // .. } } ?>
数据根
默认情况下,Symfony的 web/
目录被注册为数据根以加载资产。对于许多安装,这将是足够的,但有时您可能需要从其他位置加载图像。为此,您必须在配置中设置 data_root
参数(通常位于 app/config/config.yml
)。
liip_imagine: loaders: default: filesystem: data_root: /path/to/source/images/dir
从版本 1.7.2
开始,您可以注册多个数据根路径,文件定位器将在每个路径中搜索请求的文件。
liip_imagine: loaders: default: filesystem: data_root: - /path/foo - /path/bar
从版本 1.7.3
开始,您可以要求从所有注册的组件中自动注册公共资源路径。这允许您从位于加载的组件中的 Resources/public
文件夹加载资产。要启用此功能,将 bundle_resources.enabled
配置选项设置为 true
。
liip_imagine: loaders: default: filesystem: bundle_resources: enabled: true
如果您想注册一些 Resource/public
文件夹,但不是所有,您可以通过黑名单不注册的组件或白名单要注册的组件来实现。例如,要黑名单(不注册)"FooBundle" 和 "BarBundle" 组件,您将使用以下配置。
liip_imagine: loaders: default: filesystem: bundle_resources: enabled: true access_control_type: blacklist access_control_list: - FooBundle - BarBundle
或者,如果您只想白名单(仅注册)"FooBundle" 和 "BarBundle" 组件,您将使用以下配置。
liip_imagine: loaders: default: filesystem: bundle_resources: enabled: true access_control_type: whitelist access_control_list: - FooBundle - BarBundle
权限
图像位置必须可由您的Web服务器读取。在支持 setfacl
的系统上(例如Linux/BSD),使用
HTTPDUSER=`ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1` sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX /path/to/source/images/dir sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX /path/to/source/images/dir
有关与macOS和其他环境兼容的命令,请参阅 Symfony 权限文档。
使用Apache
您需要通过在Apache VHost配置中添加以下内容来授予Apache的读取权限
<VirtualHost *:80> <!-- Rest of directives like DocumentRoot or ServerName --> Alias /FavouriteAlias /path/to/source/images/dir <Directory "/path/to/source/images/dir"> AllowOverride None Allow from All </Directory> </VirtualHost>
或者,您可以在项目中的单独文件中放置指令,并将其包含在Apache VHost配置中。例如,您可以创建文件app/config/apache/photos.xml
,并在VHost文件中添加以下内容
<VirtualHost *:80> <!-- Rest of directives like DocumentRoot or ServerName --> Include "/path/to/your/project/app/config/apache/photos.xml" </VirtualHost>
此方法将文件与您的其他代码一起保存,便于您轻松修改或创建不同环境的配置文件。
一旦正确配置了Apache,具有以下绝对路径的图像的相对路径/path/to/source/images/dir/logo.png
必须为/FavouriteAlias/logo.png
。
文档
有关此包功能的更详细信息,请参阅文档。