图像
最后更新于:2022-04-02 05:14:55
[TOC]
# 图像
`Phalcon\Image` 是允许您操作图像文件的组件。
可以对同一图像对象执行多个操作。
## 适配器
该组件使用适配器来封装特定的图像操纵器程序。支持以下图像处理程序:
| 类 | 描述 |
| ---------------------------------- | ----------------------------------------------------------------------------------- |
| `Phalcon\Image\Adapter\Gd` | 需要 [GD PHP extension](http://php.net/manual/en/book.image.php) |
| `Phalcon\Image\Adapter\Imagick` | 需要 [ImageMagick PHP extension](http://php.net/manual/en/book.imagick.php) |
### 工厂
使用适配器选项加载`Image Adapter`类。
```php
200,
'height' => 200,
'file' => 'upload/test.jpg',
'adapter' => 'imagick',
];
$image = Factory::load($options);
```
### 实现自己的适配器
必须实现`Phalcon\Image\AdapterInterface`接口才能创建自己的图像适配器或扩展现有的图像适配器。
## 保存和渲染图像
在我们开始使用图像组件的各种功能之前,值得了解如何保存和渲染这些图像。
```php
save();
```
```php
save('new-image.jpg');
```
您还可以更改图像的格式:
```php
save('image.png');
```
保存为JPEG时,您还可以将质量指定为第二个参数:
```php
save('image.jpg', 80);
```
## 调整图像大小
有几种调整大小的模式:
* `\Phalcon\Image::WIDTH`
* `\Phalcon\Image::HEIGHT`
* `\Phalcon\Image::NONE`
* `\Phalcon\Image::TENSILE`
* `\Phalcon\Image::AUTO`
* `\Phalcon\Image::INVERSE`
* `\Phalcon\Image::PRECISE`
### `\Phalcon\Image::WIDTH`
将自动生成高度以保持比例相同;如果指定高度,则会被忽略。
```php
resize(
300,
null,
\Phalcon\Image::WIDTH
);
$image->save('resized-image.jpg');
```
### `\Phalcon\Image::HEIGHT`
将自动生成宽度以保持比例相同;如果指定宽度,则会被忽略。
```php
resize(
null,
300,
\Phalcon\Image::HEIGHT
);
$image->save('resized-image.jpg');
```
### `\Phalcon\Image::NONE`
* `NONE` 常数忽略原始图像比率。
* 宽度和高度都不是必需的。
* 如果未指定尺寸,则将使用原始尺寸。
* 如果新比例与原始比例不同,则图像可能会扭曲和拉伸。
```php
resize(
400,
200,
\Phalcon\Image::NONE
);
$image->save('resized-image.jpg');
```
### `\Phalcon\Image::TENSILE`
* 与 `NONE` 常数类似,`TENSILE` 常量忽略原始图像比率。
* 宽度和高度都是必需的。
* 如果新比例与原始比例不同,则图像可能会扭曲和拉伸。
```php
resize(
400,
200,
\Phalcon\Image::TENSILE
);
$image->save('resized-image.jpg');
```
## 裁剪图像
例如,要从图像中心获得100px×100px的正方形:
```php
getWidth() - $width) / 2);
$offsetY = (($image->getHeight() - $height) / 2);
$image->crop($width, $height, $offsetX, $offsetY);
$image->save('cropped-image.jpg');
```
## 旋转图像
```php
rotate(90);
$image->save('rotated-image.jpg');
```
## 翻转图像
`\Phalcon\Image::HORIZONTAL`常量)和垂直翻转图像(使用`\Phalcon\Image::VERTICAL`常量):
```php
flip(
\Phalcon\Image::HORIZONTAL
);
$image->save('flipped-image.jpg');
```
## 锐化图像
`sharpen()` 方法采用单个参数 - 0(无效果)和100(非常尖锐)之间的整数:
```php
sharpen(50);
$image->save('sharpened-image.jpg');
```
## 为图像添加水印
```php
watermark(
$watermark,
$offsetX,
$offsetY,
$opacity
);
$image->save('watermarked-image.jpg');
```
当然,您也可以在将水印图像应用到主图像之前对其进行操作:
```php
resize(100, 100);
$watermark->rotate(90);
$watermark->sharpen(5);
// Put the watermark in the bottom right corner with a 10px margin
$offsetX = ($image->getWidth() - $watermark->getWidth() - 10);
$offsetY = ($image->getHeight() - $watermark->getHeight() - 10);
$opacity = 70;
$image->watermark(
$watermark,
$offsetX,
$offsetY,
$opacity
);
$image->save('watermarked-image.jpg');
```
## 模糊图像
`blur()`方法采用单个参数 - 0(无效果)和100(非常模糊)之间的整数:
```php
blur(50);
$image->save('blurred-image.jpg');
```
## 像素化图像
`pixelate()` 方法采用单个参数 - 整数越高,图像的像素化程度越高:
```php
pixelate(10);
$image->save('pixelated-image.jpg');
```
';