fyii / imagefilter
Yii2 的自动图像过滤
Requires
- php: >=5.4.0
- yiisoft/yii2: ^2.0.0
Suggests
- fyii/imagefilters: Image filters for FYii Imagefilter
This package is not auto-updated.
Last update: 2018-11-14 02:55:59 UTC
README
Fyii Imagefilter 扩展提供了一种机制来自动转换和生成(过滤)图像文件。例如,您可以定义一个名为“thumbnail-100”的过滤器管道,并添加一个过滤器将其转换为 100px 缩略图。当首次访问过滤图像 URL 时,FYii Imagefilter 将应用所选管道中的所有过滤器,然后保存并输出图像。在正确配置的 Web 服务器软件(例如 nginx、Apache 等)上,下一次访问图像 URL 时将直接提供文件,无需任何 PHP/Yii2 负载。
重要:过滤图像将保存到您的 @webroot
,因此您的 Web 服务器应配置为直接提供现有文件。此外,此扩展要求在您的 Yii2 URL 管理器配置中启用 enablePrettyUrl
。有关更多信息,请参阅 https://yiiframework.cn/doc/guide/2.0/en/runtime-routing#using-pretty-urls。
使用方法
-
在您的 Yii2 应用程序中配置
imagefilter
组件。这通常意味着编辑@app\config\web.php
并包含以下行'components' => [ // (...) 'imagefilter' => [ 'class' => \fyii\imagefilter::class, 'pipelines' => [ 'thumbnail-100' => [ 'filters' => [ [ 'class' => 'app\filters\Scale', 'width' => 100, 'height' => 100, ], ], ], ], ], // (...) ]
注意,您可以在单个管道中具有多个过滤器。多个过滤器将按照配置的顺序应用。
有关创建图像过滤器的信息,请参阅下面的 创建过滤器。
-
配置图像过滤器控制器。例如,将以下内容添加到您的 Yii2 控制器映射 配置中
'controllerMap' => [ 'imagefilter' => \fyii\imagefilter\Controller::class, ],
-
配置指向图像过滤器控制器的 URL 规则。将以下内容添加到您的
urlManager
配置中'urlManager' => [ // (...) 'rules' => [ // (...) 'assets/img/<pipeline>/<version>/<src:.+>' => 'imagefilter/view', // (...) ], ],
-
使用
imagefilter
组件生成图像 URL。要生成 URL,请调用
$app->imagefilter->url()
$app->imagefilter->url('thumbnail-100', '/img/foobar.png')
调用
$app->imagefilter->img()
以生成完整的<img>
标签$app->imagefilter->img('thunbnail-100', '/img/foobar.png', ['alt' => 'Foo bar']);
注意:URL 路径和选项数组的使用方式与 \yii\helpers\Html::img() 相同。
创建过滤器
过滤器由实现 fyii\imagefilter\Filter
接口的 PHP 类定义
class MyFilter extends \yii\base\BaseObject implements \fyii\imagefilter\Filter { public $width; public $height; public function filterImage($src, $dest) { \yii\imagine\Image::thumbnail($src, $this->width, $this->height) ->save($dest); } }
单独的 FYii Imagefilters 扩展(注意:复数)包含可用于与 FYii Imagefilter 一起使用的现成过滤器。
管道版本控制
每个管道都可以有一个版本(默认 "0")。版本用于生成最终的过滤图像 URL。这允许您通过仅更改管道版本来强制浏览器在下一个请求中加载新图像。这也允许您实现非常激进的图像文件缓存(例如,您可以指示您的 Web 服务器生成 HTTP 缓存头,这些头会在未来很长时间内过期图像文件)。
示例
'standard-watermark' => [ 'filters' => [ [ 'class' => 'app\filters\Scale', 'width' => 400, 'height' => 400, ], [ 'class' => 'app\filters\AddWatermark', 'text' => 'My Image', 'fontSize' => 10, 'x' => -1, 'y' => -1, ], ], ]
由于没有指定版本,此管道分配了版本 "0"(您可以通过查看过滤图像的 URL 来检查此版本,应该像 /assets/img/standard-watermark/0/img/my-image.png
这样的 URL -- 注意路径中的第四个元素是 "0")。
现在假设您将水印字体大小从10像素更改为12像素。为了强制浏览器加载新图片,请向过滤器添加版本配置。
'standard-watermark' => [ 'version' => '1', // Force a new version 'filters' => [ // (...) [ // (...) 'fontSize' => 12, // (...) ], ], ]
注意
-
扩展程序不会从您的
@webroot
删除旧版本。您应该手动执行此操作。 -
强制浏览器获取新过滤图片的另一种方法是简单地删除对应当前版本的目录。这将强制FYii imagefilter重新生成新图片。