如何使用 FuelPHP 的 Image 类:记住一件事,忘记三件事
你好。
我是Mandai,负责Wild 开发团队。
当使用 PHP 处理图像时,您通常被迫在使用 GD 和 ImageMagick 之间做出选择。
我认为这取决于您的喜好和情况,是否使用ImageMagick(因为转换后的准确性)或GD(易于安装)。
但麻烦的是你需要学习两种不同的图像处理方法,用途完全不同。
这次我们来介绍一下FuelPHP的Image类,它封装了这两个库的基本功能,可以用通用的方法调用。
此外,如果您安装了 ImageMagick,FuelPHP 还提供了一种通过 exec 函数使用 Convert 命令进行转换的方法,即使您没有安装 IMagick。
使用 FuelPHP 版本 1.8。
安装库
安装基本上很容易,因为可以通过包管理器完成。
我总结了GD和ImageMagick的安装步骤。
安装GD
对于CentOS,GD安装是使用yum命令完成的。
这次我在安装了remi的PHP5.6的环境中添加了GD。
sudo yum install --enablerepo=remi-php56 php-gd
然后重新启动网络服务器就完成了。
查看phpinfo()的结果,如果有关于GD的描述,则说明成功。
安装 ImageMagick
接下来是安装 ImageMagick 的步骤。
顺便说一句,如果你想用 PHP 编辑图像,你只需要安装 GD 或 ImageMagick 即可。
你不需要两者。
首先,使用 yum 命令安装 ImageMagick。
sudo yum 安装 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 检查处理长行的 grep 和 -e... /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...不配置:警告:如果要重新生成检查 gawk 的 PHP 解析器,则需要 re2c 0.13 或更高版本。 .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... 不存在配置:错误:未找到 请提供 MagickWand-config 或 Wand-config 的路径。错误:`/var/tmp/imagick/configure --with-php-config=/usr/bin/php-config --with-imagick '失败
由于错误而停止。
在这种情况下,根据我的经验,安装一个名为 [package name]-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 -afuel/core/config/image.phpfuel/app/config/image.php
复制后,编辑fuel/app/config/image.php。
设置位置是第 26 行要使用的库设置。
'司机' => 'gd',
默认情况下,选择 GD,因此如果您想使用 ImageMagick,请将其更改为“imagemagick”或“imagick”。
接下来是图像质量设置。
“质量”=> 94,
默认情况下,图像质量为100%,这是最高质量,如果使用JPEG,转换后的文件大小会大几倍。
GD的默认值是75,所以最好调整在75到95之间。
之后,就由你决定了。
在初始状态下,一旦执行save方法或output方法,图像就会重新加载。
如果由于某种原因您想再次使用相同的图像(例如保存输出图像),
'坚持' => 真实,
如果您将其设置为 ,则不会重新加载,并且看起来不错。
我们来尝试编辑一下
图像从 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 方法对于调整图像大小很有用
如果你想旋转图像, rotate方法很有用。
使用GD时,如果背景在30度或45度处可见,似乎无法设置透明色。
当您想要翻转图像(垂直或水平更改方向,就像在镜子中反射一样)时,翻转类非常有用
如果您想向图像添加水印,则水印方法非常有用
当您想要为图像添加边框时,边框方法非常有用
如果您想将图像屏蔽到加载的图像,则mask 方法非常有用
在转换为带有圆角的图像时,圆角方法非常有用
然而,当结合ImageMagick和透明图像使用该方法时,似乎存在四个角的透明部分不透明的问题。
GD使用PHP计算颜色信息。
如果您想知道图像大小, sizes 方法很有用。
在这种情况下,大小是图像的水平和垂直像素数,而不是文件大小。
要获取文件大小,请使用标准函数filesize。
如果要将图像转换为灰度图像,灰度方法很有用。
Imagick和ImageMagick使用ImageMagick提供的专用函数,GD在循环中提取所有像素并在PHP上计算每个像素的颜色信息。
如果您想通过发送 HTTP 标头在浏览器中显示图像,则输出方法非常有用
如果只是简单的编辑,我想上面的内容就足够了。
它特别有用,因为更改尺寸非常容易。
就是这样。