跳转到内容

图像


概览

The Phalcon\Image命名空间公开了一个提供图像处理功能的适配器。这些适配器被设计为允许对同一图像执行多次操作。

适配器

该组件使用了提供图像处理方法的适配器。你可以轻松创建自己的适配器,使用Phalcon\Image\Adapter\AdapterInterface.

描述
Phalcon\Image\Adapter\Gd 需要GD PHP 扩展
Phalcon\Image\Adapter\Imagick 需要ImageMagick PHP 扩展

常量

Phalcon\Image\Enum包含图像调整大小和翻转的常量。可用的常量有:

调整大小

  • AUTO
  • HEIGHT
  • INVERSE
  • NONE
  • PRECISE
  • TENSILE
  • WIDTH

翻转

  • HORIZONTAL
  • VERTICAL

支持的图像 (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::HORIZONTAL
  • Phalcon\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提供了一种简单的方法来创建图像适配器对象。默认为你提供了两个适配器:

调用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元素。widthheight也可以作为选项设置。

<?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
    );
}
无噪 Logo
无噪文档
25 年 6 月翻译
文档源↗