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

你好。
我是Mandai,负责Wild 开发团队。
在 PHP 中处理图像时,通常需要在 GD 和 ImageMagick 之间做出选择。至于
选择 ImageMagick 以获得更精确的图像转换效果,还是选择 GD 以获得更便捷的安装,则取决于你的个人偏好和具体情况。
然而,令人恼火的是,它们的使用方法完全不同,所以你必须学习两种不同的图像处理方法。
这次,我们将介绍 FuelPHP 的 Image 类,它封装了这两个库的基本功能,并允许使用通用方法调用它们。
此外,即使您没有安装 ImageMagick,只要安装了 ImageMagick,FuelPHP 也提供了通过 exec 函数使用 convert 命令进行转换的方法。
所使用的 FuelPHP 版本为 1.8。
安装库
安装其实很简单,可以通过包管理器完成。
我已经总结了GD和ImageMagick的安装步骤。
安装 GD
在 CentOS 系统中,可以使用 yum 命令完成 GD 的安装。
这次,GD 被添加到已安装 remi 的 PHP5.6 的环境中。
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_resize 方法很方便。
如果要调整图像大小, resize 方法非常有用。
旋转方法可用于
旋转图像在使用 GD 时,如果背景在 30 度或 45 度角可见,似乎无法设置透明颜色。
当您想要翻转图像(将其上下颠倒或左右翻转,就像镜像一样)时, flip 类非常有用
如果你想给图片添加水印,水印方法就很有用。
如果你想给图像添加边框,边框方法就很有用。
如果要将另一幅图像叠加到已加载的图像上,可以使用mask 方法
圆角方法可用于
将图像转换为圆角但是,当将此方法与 ImageMagick 和透明图像结合使用时,似乎会出现透明角不透明的问题。GD
库在 PHP 中计算颜色信息。
如果想知道图像尺寸,可以使用
sizes 方法这里的尺寸指的是图像的宽度和高度的像素数,而不是文件大小。
要获取文件大小,请使用标准的 filesize 函数。
灰度转换方法可用于
将图像转换为灰度图像和 ImageMagick 使用 ImageMagick 提供的专用函数,而 GD 则在一个循环中提取所有像素,并在 PHP 中计算每个像素的颜色信息。
如果您想发送 HTTP 标头并在浏览器中显示图像,则输出方法非常有用
如果你只是做一些简单的编辑,以上步骤就足够了。
调整大小尤其容易,所以非常实用。
就是这样。
0