学会一个,忘记三个:如何使用 FuelPHP 的 Image 类

大家好,
我是Mandai,Wild团队负责开发工作的成员。

在 PHP 中处理图像时,通常需要在 GD 和 ImageMagick 之间做出选择。
选择 ImageMagick 是因为其转换精度更高,还是选择 GD 是因为其安装更简便,取决于您的个人偏好和具体情况。

然而,令人恼火的是,它们的使用方法完全不同,所以你必须学习两种不同的图像处理方法。

这次,我们将介绍 FuelPHP 的 Image 类,它封装了这两个库的基本功能,并允许使用通用方法调用它们。

此外,即使您没有安装 ImageMagick,FuelPHP 也提供了通过 `exec` 函数使用 `convert` 命令转换图像的方法(前提是您已安装 ImageMagick)。我
使用的是 FuelPHP 1.8 版本。

安装库

安装非常简单,可以通过软件包管理器完成。
我已经总结了GD和ImageMagick的安装步骤。

 

安装 GD

对于 CentOS 系统,可以使用 yum 命令完成 GD 的安装。
这次,我们在一个安装了 remi 提供的 PHP 5.6 的环境中添加了 GD。

sudo yum install --enablerepo=remi-php56 php-gd

最后,重启Web服务器,就完成了。
检查phpinfo()的输出;如果输出中包含与GD相关的描述信息,则表示操作成功。

 

安装 ImageMagick

接下来,我们将介绍 ImageMagick 的安装步骤。
顺便一提,如果您想使用 PHP 编辑图像,只需安装 GD 或 ImageMagick 即可,
两者并非必需。

首先,使用 yum 命令安装 ImageMagick。

sudo yum install ImageMagick

根据您使用的 Linux 发行版,它可能已经安装好了。
如果是,请继续下一步。
接下来,我们将安装 IMagick,这是一个用于从 PHP 使用 ImageMagick 的扩展库。

 

安装 iMagick

接下来,我们将使用 PECL 安装 PHP 库 IMagick。
不用想太多,只需输入以下命令……

pecl install imagick 无法安装,当前用户没有通道“pecl.php.net”的 php_dir 写入权限

你会收到类似这样的错误信息。
尝试使用 `sudo` 运行,如下所示。

sudo pecl install imagick 正在下载 imagick-3.4.3RC1.tgz ... 开始下载 imagick-3.4.3RC1.tgz (245,140 字节) ................................完成:245,140 字节 19 个源文件,正在构建 运行:phpize 配置: PHP API 版本:20131106 Zend 模块 API 编号:20131226 Zend 扩展 API 编号:220131226 请提供 ImageMagick 安装前缀 [自动检测] : 正在 /var/tmp/pear-build-rootELyyWP/imagick-3.4.3RC1 中构建 运行: /var/tmp/imagick/configure --with-php-config=/usr/bin/php-config --with-imagick 检查是否支持长行和 -e 的 grep... /bin/grep 检查是否支持 egrep... /bin/grep -E 检查是否支持sed 命令不会截断输出... /bin/sed 检查 cc... cc 检查 C 编译器默认输出文件名... a.out 检查 C 编译器是否工作... 是 检查是否正在进行交叉编译... 否 检查可执行文件的后缀... 检查目标文件的后缀... o 检查是否正在使用 GNU C 编译器... 是 检查 cc 是否接受 -g 选项... 是 cc 是否支持 ISO C89... 不需要 如何运行 C 预处理器... cc -E 检查 icc... 否 检查 suncc... 否 检查 cc 是否支持 -c 和 -o 选项... 是 检查系统库目录... lib 检查编译器是否支持 -R 选项... 否 检查编译器是否支持 -Wl、-rpath 等选项... 是 检查构建系统类型... x86_64-unknown-linux-gnu 检查主机系统类型... x86_64-unknown-linux-gnu 检查目标系统类型... x86_64-unknown-linux-gnu 检查 PHP 前缀... /usr检查 PHP 包含文件... -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib 检查 PHP 扩展目录... /usr/lib64/php/modules 检查已安装的 PHP 头文件前缀... /usr/include/php 检查是否启用调试... 否 检查是否启用 zts... 否 检查 re2c... 否 配置:警告:如果您想要重新生成 PHP 解析器,则需要 re2c 0.13.4 或更高版本。正在检查 gawk... gawk 正在检查是否启用 imagick 扩展... 是,共享 正在检查 pkg-config... /usr/bin/pkg-config 正在检查 ImageMagick MagickWand API 配置程序... 正在测试 /usr/local/bin/MagickWand-config... 不存在 正在测试 /usr/bin/MagickWand-config... 不存在 正在测试 /usr/sbin/bin/MagickWand-config... 不存在 正在测试 /opt/bin/MagickWand-config... 不存在 正在测试 /opt/local/bin/MagickWand-config... 不存在 configure:错误:未找到。请提供 MagickWand-config 或 Wand-config 程序的路径。 错误:`/var/tmp/imagick/configure --with-php-config=/usr/bin/php-config --with-imagick` 失败

它因为出错而停止了。
遇到这种情况,安装名为 [软件包名称]-devel 的开发包通常可以解决问题,但我不太确定它是否存在。无论如何,我将尝试运行以下命令。

sudo yum install ImageMagick-devel

似乎已成功找到安装包,因此我将继续进行安装。
由于依赖包较多,可能需要一些时间。

安装成功后,请再次尝试从 PECL 安装 IMagick。

sudo pecl install imagick 正在下载 imagick-3.4.3RC1.tgz ... 开始下载 imagick-3.4.3RC1.tgz (245,140 字节) ................................完成:245,140 字节 19 个源文件,正在构建 -- 省略 -- 构建过程成功完成 正在安装 '/usr/lib64/php/modules/imagick.so' 正在安装 '/usr/include/php/ext/imagick/php_imagick_shared.h' 安装成功:channel://pecl.php.net/imagick-3.4.3RC1 配置选项“php_ini”未设置为 php.ini 位置 您应该将“extension=imagick.so”添加到 php.ini

编译似乎已成功完成,安装也已完成。
最后,会提示您将“extension=imagick.so”添加到php.ini文件中,请添加它。

如果你想更巧妙地实现这一点,只需在 /etc/php.d/ 下创建一个名称合适的 ini 文件,并在其中添加“extension=imagick.so”即可。

之后,只需像重启 GD 一样重启 Web 服务器即可。

 

准备使用 FuelPHP 中的各种图像库

首先,我们需要准备一个配置文件来处理 Image 类的设置。
默认设置位于 fuel/core/config/image.php,因此请将其复制到 fuel/app/config 目录。
在 FuelPHP 根目录下,您可以使用以下命令进行复制。

cp -a fuel/core/config/image.php fuel/app/config/image.php

复制后,编辑 fuel/app/config/image.php。

设置位于第 26 行,这是要使用的库的设置。

    'driver' => 'gd',

默认情况下选择的是 GD,所以如果您想使用 ImageMagick,请将其更改为“imagemagick”或“imagick”。

接下来,设置图像质量。

    '质量' => 94,

默认情况下,质量设置为最高值 100%,这将使转换后的 JPEG 文件大小增加数倍。GD
的默认值为 75,因此最好将其调整到 75-95 左右。

其余的都取决于你的个人喜好。

默认情况下,执行保存或输出方法后,图像会被重新加载。
如果出于某种原因您想再次使用同一图像(例如,保存已输出的图像),

	'persistence' => true,

这似乎不错,因为它可以防止重新装弹。

 

我们来尝试编辑

图像加载由 Fuel\Core\Image 类处理。
该类会根据配置设置选择 GD、IMagick 或 ImageMagick 的相应驱动程序。

$image = Fuel\Core\Image::forge(null, '/path/to/image');

图片加载完成。
使用 GD 时,您需要手动选择并使用 `imagecreatefrom*` 函数,但此类会自动识别并定义这些函数。
然而,由于它仅通过文件扩展名识别文件,因此加载没有扩展名的文件时会发生错误。

在这种情况下,不要锻造,而要使用加载方法。

$image = Fuel\Core\Image::load('/path/to/image', false, 'jpg');

第三个参数允许你指定文件扩展名。
如果你要编辑的文件没有扩展名,就必须以二进制格式检查它,这需要一些技巧。
第二个参数仅对 GD 有效,我没弄明白它的用途。

在这种情况下,您无法添加或覆盖配置,因此您需要事先创建一个合适的配置文件。

对于各种编辑技巧,Image-Class-FuelPHP 文档非常有帮助。
其中描述的方法适用于所有驱动程序,因此理解这些方法就足够了。

对于裁剪图像,`crop` 方法非常有用。

如果要从中心裁剪,`crop_resize` 方法是一个方便的选择。

对于调整图像大小,`resize` 方法非常方便。

旋转图像`rotate` 方法可用于
在使用 GD 时,似乎无法在旋转 30 度或 45 度时,当背景可见时设置透明颜色。

翻转图像(垂直或水平改变其方向,就像在镜子中反射一样)`flip` 类可用于

向图像添加水印`watermark` 方法可用于

给图像添加边框`border` 方法可用于

如果要对已加载的图像进行遮罩,`mask` 方法非常有用。

将图像转换为圆角`rounded` 方法便于
但是,当将此方法与 ImageMagick 和透明图像结合使用时,似乎存在一个错误,即四个角的透明部分不会被正确处理。GD
在 PHP 中计算颜色信息。

如果想知道图片的大小,`sizes` 方法可以使用
这里所说的大小指的是图片的宽度和高度的像素数,而不是文件大小。
要获取文件大小,请使用标准函数 `filesize`。

将图像转换为灰度图像时,`grayscale` 方法非常有用。Imagick
和 ImageMagick 使用 ImageMagick 提供的专用函数,而 GD 则在一个循环中提取所有像素,并在 PHP 中计算每个像素的颜色信息。

如果你想通过 HTTP 标头发送图像并在浏览器中显示它,`output` 方法非常有用。

对于简单的编辑,以上步骤应该足够了。
特别是调整大小,非常简单方便。

就这样。

如果您觉得这篇文章对您有帮助,请点个“赞”!
0
加载中...
0票,平均分:0.00/10
2,618
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

万代洋一

我的主要工作是开发社交游戏的Web API,但幸运的是,我也有机会参与其他各种任务,包括市场营销。
我在Beyond中的图像版权采用CC0协议。