[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
<?php
use Phalcon\Image\Factory;
$options = [
'width' => 200,
'height' => 200,
'file' => 'upload/test.jpg',
'adapter' => 'imagick',
];
$image = Factory::load($options);
```
### 實現自己的適配器
必須實現`Phalcon\Image\AdapterInterface`接口才能創建自己的圖像適配器或擴展現有的圖像適配器。
## 保存和渲染圖像
在我們開始使用圖像組件的各種功能之前,值得了解如何保存和渲染這些圖像。
```php
<?php
$image = new \Phalcon\Image\Adapter\Gd('image.jpg');
// ...
// Overwrite the original image
$image->save();
```
```php
<?php
$image = new \Phalcon\Image\Adapter\Gd('image.jpg');
// ...
// Save to 'new-image.jpg'
$image->save('new-image.jpg');
```
您還可以更改圖像的格式:
```php
<?php
$image = new \Phalcon\Image\Adapter\Gd('image.jpg');
// ...
// Save as a PNG file
$image->save('image.png');
```
保存為JPEG時,您還可以將質量指定為第二個參數:
```php
<?php
$image = new \Phalcon\Image\Adapter\Gd('image.jpg');
// ...
// Save as a JPEG with 80% quality
$image->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
<?php
$image = new \Phalcon\Image\Adapter\Gd('image.jpg');
$image->resize(
300,
null,
\Phalcon\Image::WIDTH
);
$image->save('resized-image.jpg');
```
### `\Phalcon\Image::HEIGHT`
將自動生成寬度以保持比例相同;如果指定寬度,則會被忽略。
```php
<?php
$image = new \Phalcon\Image\Adapter\Gd('image.jpg');
$image->resize(
null,
300,
\Phalcon\Image::HEIGHT
);
$image->save('resized-image.jpg');
```
### `\Phalcon\Image::NONE`
* `NONE` 常數忽略原始圖像比率。
* 寬度和高度都不是必需的。
* 如果未指定尺寸,則將使用原始尺寸。
* 如果新比例與原始比例不同,則圖像可能會扭曲和拉伸。
```php
<?php
$image = new \Phalcon\Image\Adapter\Gd('image.jpg');
$image->resize(
400,
200,
\Phalcon\Image::NONE
);
$image->save('resized-image.jpg');
```
### `\Phalcon\Image::TENSILE`
* 與 `NONE` 常數類似,`TENSILE` 常量忽略原始圖像比率。
* 寬度和高度都是必需的。
* 如果新比例與原始比例不同,則圖像可能會扭曲和拉伸。
```php
<?php
$image = new \Phalcon\Image\Adapter\Gd('image.jpg');
$image->resize(
400,
200,
\Phalcon\Image::TENSILE
);
$image->save('resized-image.jpg');
```
## 裁剪圖像
例如,要從圖像中心獲得100px×100px的正方形:
```php
<?php
$image = new \Phalcon\Image\Adapter\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('cropped-image.jpg');
```
## 旋轉圖像
```php
<?php
$image = new \Phalcon\Image\Adapter\Gd('image.jpg');
// Rotate an image by 90 degrees clockwise
$image->rotate(90);
$image->save('rotated-image.jpg');
```
## 翻轉圖像
`\Phalcon\Image::HORIZONTAL`常量)和垂直翻轉圖像(使用`\Phalcon\Image::VERTICAL`常量):
```php
<?php
$image = new \Phalcon\Image\Adapter\Gd('image.jpg');
// Flip an image horizontally
$image->flip(
\Phalcon\Image::HORIZONTAL
);
$image->save('flipped-image.jpg');
```
## 銳化圖像
`sharpen()` 方法采用單個參數 - 0(無效果)和100(非常尖銳)之間的整數:
```php
<?php
$image = new \Phalcon\Image\Adapter\Gd('image.jpg');
$image->sharpen(50);
$image->save('sharpened-image.jpg');
```
## 為圖像添加水印
```php
<?php
$image = new \Phalcon\Image\Adapter\Gd('image.jpg');
$watermark = new \Phalcon\Image\Adapter\Gd('me.jpg');
// Put the watermark in the top left corner
$offsetX = 10;
$offsetY = 10;
$opacity = 70;
$image->watermark(
$watermark,
$offsetX,
$offsetY,
$opacity
);
$image->save('watermarked-image.jpg');
```
當然,您也可以在將水印圖像應用到主圖像之前對其進行操作:
```php
<?php
$image = new \Phalcon\Image\Adapter\Gd('image.jpg');
$watermark = new \Phalcon\Image\Adapter\Gd('me.jpg');
$watermark->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
<?php
$image = new \Phalcon\Image\Adapter\Gd('image.jpg');
$image->blur(50);
$image->save('blurred-image.jpg');
```
<a name='pixelating'></a>
## 像素化圖像
`pixelate()` 方法采用單個參數 - 整數越高,圖像的像素化程度越高:
```php
<?php
$image = new \Phalcon\Image\Adapter\Gd('image.jpg');
$image->pixelate(10);
$image->save('pixelated-image.jpg');
```
- 常規
- Welcome
- 貢獻
- 生成回溯
- 測試重現
- 單元測試
- 入門
- 安裝
- Web服務器設置
- WAMP
- XAMPP
- 教程
- 基礎教程
- 教程:創建一個簡單的REST API
- 教程:V?kuró
- 提升性能
- 教程:INVO
- 開發環境
- Phalcon Compose (Docker)
- Nanobox
- Phalcon Box (Vagrant)
- 開發工具
- Phalcon開發者工具的安裝
- Phalcon開發者工具的使用
- 調試應用程序
- 核心
- MVC應用
- 微應用
- 創建命令行(CLI)應用程序
- 依賴注入與服務定位
- MVC架構
- 服務
- 使用緩存提高性能
- 讀取配置
- 上下文轉義
- 類加載器
- 使用命名空間
- 日志
- 隊列
- 數據庫
- 數據庫抽象層
- Phalcon查詢語言(PHQL)
- ODM(對象文檔映射器)
- 使用模型
- 模型行為
- ORM緩存
- 模型事件
- 模型元數據
- 模型關系
- 模型事務
- 驗證模型
- 數據庫遷移
- 分頁
- 前端
- Assets管理
- 閃存消息
- 表單
- 圖像
- 視圖助手(標簽)
- 使用視圖
- Volt:模板引擎
- 業務邏輯
- 訪問控制列表(ACL)
- 注解解析器
- 控制器
- 調度控制器
- 事件管理器
- 過濾與清理
- 路由
- 在session中存儲數據
- 生成URL和路徑
- 驗證
- HTTP
- Cookies管理
- 請求環境
- 返回響應
- 安全
- 加密/解密
- 安全
- 國際化
- 國際化
- 多語言支持