paivlista / palette
一个按需处理和操作图像的库
Requires
- php: >=5.4.0
- ext-fileinfo: *
- ext-gd: *
- ext-json: *
- ext-mbstring: *
Requires (Dev)
- ext-imagick: *
- nette/tester: ~1.3
Suggests
- ext-imagick: For support cmyk images, better performance and Utils/Compare tool.
README
PHP 扩展,允许对图像进行高级处理、创建缩略图和版本。
Palette 是什么以及它是如何工作的?
- Palette 用于轻松创建不同图像变体。
- 特定图像的变体总是根据对所需变体图像的第一个请求生成的。
- 图像变体的生成不会在运行的 PHP 脚本执行时进行,Palette 仅 生成 一个 URL,该 URL 将包含请求的变体。只有在访问该 URL 时,如果之前未生成,则会生成该变体。 由于这种生成图像变体的原理,在单个页面上生成 100+ 变体而不会耗尽 PHP 资源或使页面加载时间变长,这并不是问题。
安装和配置
1. 我们最好使用 composer 将 Palette 安装到项目中。
php composer.phar require pavlista/palette
2. 我们将创建一个服务实例 Palette\Service,该服务确保访问 Palette 的功能。
该类只有一个必选参数,即实现 interface Palette\Generator\IPictureGenerator 的类实例。Palette 中已经准备好实现,这是类 Palette\Generator\Server。
Palette\Generator\Server 的参数如下
- storagePath: 存储生成的缩略图和图像的文件夹的相对或绝对路径。这个文件夹必须存在,并且可以写入!
- storageUrl: 以斜杠结尾的绝对 URL 地址,其中包含公开可访问的缩略图文件夹。
- basePath: 网站文档根的绝对路径。此参数是可选的。
- signingKey: 用于签名请求的唯一字符串。
因此,创建 Palette 实例应如下所示
$generator = new Palette\Generator\Server( 'files/thumbs', // storagePath 'http://www.example.com/files/thumbs/', // storageUrl '/var/www/example.com/', // basePath '%signingKey%' ); $palette = new Palette\Service($generator);
3. 创建和配置 Palette 后端
在所选的存储生成变体的位置(storagePath)中,我们需要创建一个名为 palette-server.php 的文件(名称可以是任意的),在该文件中,我们将对 Palette 服务实例(Palette\Service)调用 serverResponse 方法。
文件代码可能如下所示
<?php // !!! Zde je nutné implementovat získání již nakonfigurované instance služby Palette. // Popřípadě ji vytvořit se stejným nastavením znovu. V tom případě ale pozor na zadávané cesty. $palette->serverResponse();
4. 将不存在的文件和目录重定向到后端
在所选的存储位置,我们将所有不存在的文件和目录重定向到创建的后端文件。
Apache 中的示例设置
将以下 .httacess 文件添加到存储文件夹中
#<IfModule mod_rewrite.c> RewriteEngine on #RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ palette-server.php [PT,L] #</IfModule>
Nginx 中的示例设置
将以下部分添加到当前服务器的设置部分
location /files/thumbs/ { try_files $uri $uri/ /files/thumbs/palette-server.php$is_args$args; }
使用 Palette
图像变体通过图像查询从源图像创建。通过图像查询,我们确定要应用于图像的所有效果和转换以及它们的顺序。
图像查询的写法
1) 图像查询从源图像文件的相对或绝对路径开始,后面跟着字符 @
。这部分图像查询可以不填写,如果已经以某种方式设置了要从哪个图像创建变体。
示例: files/obrazek.png@
2) 接着是我们要应用于图像的过滤器的列表。各个过滤器由字符 &
或 |
分隔。
示例: files/obraze.png@Resize;100;200&Grayscale
每个过滤器的概述、说明和示例可以在 此处找到。
3) 一些过滤器使用参数来设置其他过滤器属性。这些参数由分号 ;
分隔。
示例: files/obrazek.png@Resize;150&Grayscale&Contrast;-50
4) 在一些参数可选或具有默认值的过滤器中,可以通过空格跳过在查询中填写这些参数。
示例: files/obrazek.png@Resize;150;;crop
PHP中实际应用的示例
1) 获取150 x 120px缩小图像的URL的不同写入方式
/** * @var $palette Palette\Service */ echo $palette->getUrl('image.png', 'Resize;150;120'); echo $palette->getUrl('image.png@Resize;150;120'); echo $palette('image.png', 'Resize;150;120'); echo $palette('image.png@Resize;150;120');
2) 在图像查询中写入更复杂的命令
/** * @var $palette Palette\Service */ echo $palette->getUrl('image.png', 'Resize;150;120&Rotate;-90&Border;1;1;#ccc');
3) 在基本PHP和HTML中显示缩略图的示例
<img src='<?=$palette('image.png@Resize;150;120')?>' alt='Resized image' />