图像¶
概览¶
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提供了一种简单的方法来创建图像适配器对象。默认为你提供了两个适配器:
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
);
}