paivlista/palette

一个按需处理和操作图像的库

v2.9.3 2024-02-02 13:58 UTC

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' />

重要链接