图像¶
概览¶
The Phalcon\Image命名空间公开了一个提供图像处理功能的适配器。这些适配器被设计为允许对同一图像执行多次操作。
适配器¶
该组件使用了提供图像处理方法的适配器。你可以轻松创建自己的适配器,使用Phalcon\Image\Adapter\AdapterInterface.
| 类 | 描述 | 
|---|---|
| Phalcon\Image\Adapter\Gd | 需要GD PHP 扩展 | 
| Phalcon\Image\Adapter\Imagick | 需要ImageMagick PHP 扩展 | 
常量¶
Phalcon\Image\Enum包含图像调整大小和翻转的常量。可用的常量有:
调整大小
AUTOHEIGHTINVERSENONEPRECISETENSILEWIDTH
翻转
HORIZONTALVERTICAL
支持的图像 (GD)¶
- IMAGETYPE_GIF
 - IMAGETYPE_JPEG
 - IMAGETYPE_JPEG2000
 - IMAGETYPE_PNG
 - IMAGETYPE_WEBP
 - IMAGETYPE_WBMP
 - IMAGETYPE_XBM
 
获取方法¶
每个适配器提供获取者以提供组件的相关信息:
| 方法 | 描述 | 
|---|---|
getHeight(): int |  返回图像高度 | 
getImage(): mixed |  返回图像 | 
getMime(): string |  返回图像 MIME 类型 | 
getRealpath(): string |  返回图像所在的真实路径 | 
getType(): int |  返回图像类型(这取决于驱动程序) | 
getWidth(): int |  返回图像宽度 | 
GD¶
Phalcon\Image\Adapters\Gd使用GD PHP 扩展。为了使用此适配器,你的系统中必须存在该扩展。适配器提供了以下操作部分描述的所有方法。
Imagick¶
Phalcon\Image\Adapters\Imagick使用ImageMagick PHP 扩展。为了使用此适配器,你的系统中必须存在该扩展。适配器提供了以下操作部分描述的所有方法。
操作¶
background()¶
 设置图像的背景颜色。可用参数为:
| 参数 | 描述 | 
|---|---|
string $color |  十六进制格式的颜色 | 
int $opacity |  透明度(可选,默认值100) |  
<?php
use Phalcon\Image\Adapter\Gd;
$image = new Gd('image.jpg');
$image->background('#000033', 70);
$image->save('background-image.jpg');
blur()¶
 模糊图像。传递的整数参数指定模糊操作的半径。范围在 0(无效果)到 100(非常模糊)之间:
<?php
use Phalcon\Image\Adapter\Gd;
$image = new Gd('image.jpg');
$image->blur(50);
$image->save('blur-image.jpg');
crop()¶
 你可以通过编程方式裁剪图像。这个crop()方法接受以下参数:
| 参数 | 描述 | 
|---|---|
int $width |  宽度 | 
int $height |  高度 | 
int $offsetX |  X轴偏移量(可选) | 
int $offsetY |  Y轴偏移量(可选) | 
以下示例从图像中心裁剪 100px x 100px 的区域:
<?php
use Phalcon\Image\Adapter\Gd;
$image = new Gd('image.jpg');
$width   = 100;
$height  = 100;
$offsetX = ($image->getWidth() - $width) / 2;
$offsetY = ($image->getHeight() - $height) / 2;
$image->crop($width, $height, $offsetX, $offsetY);
$image->save('crop-image.jpg');
flip()¶
 你可以水平或垂直翻转图像。这个flip()方法接受一个整数,表示方向。你可以为此操作使用常量:
Phalcon\Image\Enum::HORIZONTALPhalcon\Image\Enum::VERTICAL
<?php
use Phalcon\Image\Adapter\Gd;
use Phalcon\Image\Enum;
$image = new Gd('image.jpg');
$image->flip(Enum::HORIZONTAL);
$image->save('flip-image.jpg');
liquidRescale()¶
 此方法仅在Phalcon\Image\Imagick适配器中可用。它使用液体重缩放方法来调整图像大小。该方法接受以下参数:
| 参数 | 描述 | 
|---|---|
int $width |  新宽度 | 
int $height |  新高度 | 
int $deltaX |  缝隙可以在x轴上移动的最大距离。传递0将使缝隙保持直线。(可选,默认值0) |  
int $rigidity |  引入非直线缝隙的偏置。(可选,默认值0) |  
<?php
use Phalcon\Image\Adapter\Gd;
$image = new Gd('image.jpg');
$image->liquidRescale(500, 200, 3, 25);
$image->save('liquidrescale-image.jpg');
mask()¶
 从两张图像创建复合图像。接受第一张图像作为参数。
<?php
use Phalcon\Image\Adapter\Gd;
$front = new Gd('front.jpg');
$back  = new Gd('back.jpg');
$front->mask($front);
$front->save('mask-image.jpg');
pixelate()¶
 向图像添加像素化效果。该方法接受一个整数参数。数字越大,图像越像素化:
<?php
use Phalcon\Image\Adapter\Gd;
$image = new Gd('image.jpg');
$image->pixelate(10);
$image->save('pixelate-image.jpg');
reflection()¶
 向图像添加反射效果。该方法接受以下参数:
| 参数 | 描述 | 
|---|---|
int $height |  高度 | 
int $opacity |  透明度(可选,默认值100) |  
bool $fadeIn |  是否淡入(可选,默认值false) |  
<?php
use Phalcon\Image\Adapter\Gd;
$image = new Gd('image.jpg');
$image->reflection(100, 75, true);
$image->save('reflection-image.jpg');
render()¶
 渲染图像并将其作为二进制字符串返回。该方法接受以下参数:
| 方法 | 描述 | 
|---|---|
string $ext |  扩展名(可选) | 
int $quality |  图像质量(可选,默认值100) |  
<?php
use Phalcon\Image\Adapter\Gd;
$image = new Gd('image.jpg');
// ....
echo $image->render('jpg', 90);
resize()¶
 根据传递的参数调整图像大小。该方法接受以下参数:
| 参数 | 描述 | 
|---|---|
int $width |  宽度(可选) | 
int $height |  高度(可选) | 
int $master |  表示调整大小方法的常量(默认值AUTO) |  
常量 - Phalcon\Image\Enum::AUTO - Phalcon\Image\Enum::HEIGHT - Phalcon\Image\Enum::INVERSE - Phalcon\Image\Enum::NONE - Phalcon\Image\Enum::PRECISE - Phalcon\Image\Enum::TENSILE - Phalcon\Image\Enum::WIDTH
如果任何参数不正确,会抛出Phalcon\Image\Exception异常。
高度
宽度将自动生成以保持比例相同;如果指定了宽度,它将被忽略。
<?php
use Phalcon\Image\Adapter\Gd;
use Phalcon\Image\Enum;
$image = new Gd('image.jpg');
$image->resize(null, 300, Enum::HEIGHT);
$image->save('resize-height-image.jpg');
反向
调整大小并反转传递的宽度和高度
<?php
use Phalcon\Image\Adapter\Gd;
use Phalcon\Image\Enum;
$image = new Gd('image.jpg');
$image->resize(400, 200, Enum::INVERSE);
$image->save('resize-inverse-image.jpg');
无
- The 
NONE常量忽略原始图像的比例。 - 不需要宽度或高度。
 - 如果未指定尺寸,则使用原始尺寸。
 - 如果新比例与原始比例不同,图像可能会失真和拉伸。
 
<?php
use Phalcon\Image\Adapter\Gd;
use Phalcon\Image\Enum;
$image = new Gd('image.jpg');
$image->resize(400, 200, Enum::NONE);
$image->save('resize-none-image.jpg');
拉伸
- 类似于
NONE常量,TENSILE常量忽略原始图像的比例。 - 需要宽度和高度。
 - 如果新比例与原始比例不同,图像可能会失真和拉伸。
 
<?php
use Phalcon\Image\Adapter\Gd;
use Phalcon\Image\Enum;
$image = new Gd('image.jpg');
$image->resize(400, 200, Enum::TENSILE);
$image->save('resize-tensile-image.jpg');
宽度
高度将自动生成以保持比例相同;如果指定了高度,它将被忽略。
<?php
use Phalcon\Image\Adapter\Gd;
use Phalcon\Image\Enum;
$image = new Gd('image.jpg');
$image->resize(300, null, Enum::WIDTH);
$image->save('resize-width-image.jpg');
rotate()¶
 根据给定的角度旋转图像。正数表示顺时针旋转,负数表示逆时针旋转。
以下示例将图像顺时针旋转 90 度
<?php
use Phalcon\Image\Adapter\Gd;
$image = new Gd('image.jpg');
$image->rotate(90);
$image->save('rotate-image.jpg');
save()¶
 在操纵完图像后,你可能希望保存它。如果你只是想将操纵结果作为字符串返回,可以使用render()方法设置容器。
The save()方法接受文件名和质量作为参数:
| 属性 | 描述 | 
|---|---|
string $file |  目标文件名(可选) | 
int $quality |  图像质量(可选,默认值-1) |  
如果未指定文件名,处理后的图像将会覆盖原始图像。
<?php
use Phalcon\Image\Adapter\Gd;
$image = new Gd('image.jpg');
$image->rotate(90);
$image->save();
当指定文件名时,处理后的图像将以该名称保存,原始图像保持不变。
<?php
use Phalcon\Image\Adapter\Gd;
$image = new Gd('image.jpg');
$image->rotate(90);
$image->save('rotate-image.jpg');
你还可以通过不同的扩展名更改图像格式。此功能取决于你正在使用的适配器。
<?php
use Phalcon\Image\Adapter\Gd;
$image = new Gd('image.jpg');
$image->rotate(90);
$image->save('rotate-image.png');
保存为JPEG时,也可以将质量指定为第二个参数:
<?php
use Phalcon\Image\Adapter\Gd;
$image = new Gd('image.jpg');
$image->rotate(90);
$image->save('rotate-image.jpg', 90);
sharpen()¶
 锐化图像。传递的整数参数指定锐化操作的程度。范围是介于0(无效果)到100(非常锐利)之间:
<?php
use Phalcon\Image\Adapter\Gd;
$image = new Gd('image.jpg');
$image->sharpen(50);
$image->save('sharpen-image.jpg');
text()¶
 你可以通过调用text()来添加文字到你的图片中。可用的参数有:
| 属性 | 描述 | 
|---|---|
string $text |  文本内容 | 
int|false $offsetX |  X轴偏移量,false禁用 |  
int|false $offsetY |  Y轴偏移量,false禁用 |  
int $opacity |  文字的透明度(可选,默认值100) |  
string $color |  文字的颜色(可选,默认值"000000") |  
int $size |  文字的字体大小(可选,默认值12) |  
string $fontfile |  文字使用的字体文件(可选) | 
<?php
use Phalcon\Image\Adapter\Gd;
$image = new Gd('image.jpg');
$image->text(
    'Phalcon Framework',
    10,
    10,
    75,
    '000033',
    14,
    '/app/assets/fonts/titilium.tff'
);
$image->save('text-image.jpg');
watermark()¶
 向图像添加水印。可用的参数有:
| 属性 | 描述 | 
|---|---|
AdapterInterface $watermark |  用于水印的图像 | 
int $offsetX |  X轴偏移量(可选) | 
int $offsetY |  Y轴偏移量(可选) | 
int $opacity |  图像的透明度(可选,默认值100) |  
下面的例子将水印放置在图像的左上角:
<?php
use Phalcon\Image\Adapter\Gd;
$watermark = new Gd('watermark.jpg');
$image     = new Gd('image.jpg');
$offsetX = 10;
$offsetY = 10;
$opacity = 70;
$image->watermark(
    $watermark,
    $offsetX,
    $offsetY,
    $opacity
);
$image->save('watermark-image.jpg');
在应用到主图像之前,你还可以对带有水印的图像进行操作。在下面的例子中,我们调整大小、旋转以及锐化水印,并将其放置在右下角,周围留有10px的边距:
<?php
use Phalcon\Image\Adapter\Gd;
$watermark = new Gd('watermark.jpg');
$image     = new Gd('image.jpg');
$watermark->resize(100, 100);
$watermark->rotate(90);
$watermark->sharpen(5);
$offsetX = ($image->getWidth() - $watermark->getWidth() - 10);
$offsetY = ($image->getHeight() - $watermark->getHeight() - 10);
$opacity = 70;
$image->watermark(
    $watermark,
    $offsetX,
    $offsetY,
    $opacity
);
$image->save('watermark-image.jpg');
工厂¶
newInstance¶
 The Phalcon\Image\ImageFactory提供了一种简单的方法来创建图像适配器对象。默认为你提供了两个适配器:
gd- Phalcon\Image\Adapter\Gdimagick- Phalcon\Image\Adapter\Imagick
调用newInstance()并使用相关的键和参数将返回相应的适配器。工厂始终返回新的实例Phalcon\Image\Adapter\AdapterInterface.
<?php
use Phalcon\Image\ImageFactory;
$factory = new ImageFactory();
$image = $factory->newInstance('gd', 'image.jpg');
可用参数为newInstance()是:
| 属性 | 描述 | 
|---|---|
string $name |  适配器名称 | 
string $file |  文件名 | 
int $width |  图像宽度(可选) | 
int $height |  图像高度(可选) | 
load¶
 图像工厂还提供load方法,该方法接受一个配置对象。此对象可以是一个数组或Phalcon\Config\Config对象,其中包含用于设置图像适配器的指令。该对象需要adapter元素以及file元素。width和height也可以作为选项设置。
<?php
use Phalcon\Image\ImageFactory;
$factory = new ImageFactory();
$options = [
    'adapter' => 'gd',
    'file'    => 'image.jpg',
    'width'   => 400,
    'height'  => 200,
];
$image = $factory->load($options);
异常¶
图像组件中抛出的所有异常都将是类型Phalcon\Image\Exception。你可以使用此异常选择性地捕获仅从此组件抛出的异常。
<?php
use Phalcon\Image\Adapter\Gd;
use Phalcon\Image\Exception;
use Phalcon\Mvc\Controller;
class IndexController extends Controller
{
    public function index()
    {
        try {
            $image = new Gd('image.jpg');
            $image->pixelate(10);
            $image->save('pixelated-image.jpg');
        } catch (Exception $ex) {
            echo $ex->getMessage();
        }
    }
}
自定义¶
The Phalcon\Image\Adapter\AdapterInterface接口必须被实现以创建自己的图像适配器或扩展现有的适配器。然后可以轻松地将其添加到Phalcon\Image\ImageFactory.
<?php
use Phalcon\Image\Adapter\AdapterInterface;
use Phalcon\Image\Enum;
class MyImageAdapter implements AdapterInterface
{
    /**
     * Manipulate the background
     */
    public function background(
        string $color, 
        int $opacity = 100
    );
    /**
     * Blur the image
     */
    public function blur(int $radius);
    /**
     * Crop the image
     */
    public function crop(
        int $width, 
        int $height, 
        int $offsetX = null, 
        int $offsetY = null
    );
    /**
     * Flip the image
     */
    public function flip(int $direction);
    /**
     * Add a mask to the image
     */
    public function mask(AdapterInterface $watermark);
    /**
     * Pixelate the image
     */
    public function pixelate(int $amount);
    /**
     * Add a reflection to the image
     */
    public function reflection(
        int $height, 
        int $opacity = 100, 
        bool $fadeIn = false
    );
    /**
     * Render the image
     */
    public function render(
        string $ext = null, 
        int $quality = 100
    );
    /**
     * Resize the image
     */
    public function resize(
        int $width = null, 
        int $height = null, 
        int $master = Enum::AUTO
    );
    /**
     * Rotate the image
     */
    public function rotate(int degrees);
    /**
     * Save the image
     */
    public function save(string $file = null, int $quality = 100);
    /**
     * Sharpen the image
     */
    public function sharpen(int $amount);
    /**
     * Add text to the image
     */
    public function text(
        string $text, 
        int $offsetX = 0, 
        int $offsetY = 0, 
        int $opacity = 100, 
        string $color = "000000", 
        int $size = 12, 
        string $fontfile = null
    );
    /**
     * Add a watermark to the image
     */
    public function watermark(
        AdapterInterface $watermark, 
        int $offsetX = 0, 
        int $offsetY = 0, 
        int $opacity = 100
    );
}