# 圖像操作
Nette \ Utils \ Image類用于基本的圖像處理。 它簡化了基本操作,如圖像大小調整,銳化或將圖像發送到瀏覽器。
如果你想在PHP中操作圖像(比如縮放或銳化圖像),你必須編寫一個不可讀和不可理解的代碼。 它不會是Nette框架,如果它沒有來更好的API :-)
我們可以從加載文件中的圖像開始:
~~~
use Nette\Utils\Image;
$image = Image::fromFile('nette.jpg');
~~~
或者我們可以創建新的空白圖像,大小為100×200:
~~~
$image = Image::fromBlank(100, 200);
~~~
我們可以選擇設置背景顏色(默認為黑色):
~~~
$image = Image::fromBlank(100, 200, Image::rgb(125, 0, 0));
~~~
我們會寫出它的大小:
~~~
echo "Image size is: $image->width × $image->height";
~~~
## 圖像調整大小
我們將按比例縮小圖像,使其不超過50×30像素:
~~~
$image->resize(50, 30);
~~~
可以只設置一個維度,計算第二個維度:
~~~
$image->resize(50, NULL); // width 50px, height auto
$image->resize(NULL, 30); // width auto, height 30px
~~~
任何維度也可以百分比設置:
~~~
$image->resize('75%', 30); // 75% × 30px
~~~
在所提到的示例中,圖像僅按比例縮小。 可以通過使用指令Image :: ENLARGE允許放大:
~~~
$image->resize(50, 30, Image::ENLARGE);
~~~
使用指令Image :: STRETCH,我們可以允許大小的非比例變化:
~~~
$image->resize(50, 30, Image::STRETCH);
~~~
兩個指令可以組合:
~~~
$image->resize(50, 30, Image::ENLARGE | Image::STRETCH);
~~~
如果我們將一個或兩個維度作為負數寫入,圖像將被翻轉(水平或垂直):
~~~
$flipped = $image->resize(NULL, '-100%'); // flip vertically
$flipped = $image->resize('-100%', '-100%'); // rotate by 180°
$flipped = $image->resize(-125, 50); // resize & flip horizontally
~~~
## 圖像修改
減少圖像后,我們可以通過銳化來改善它:
~~~
$image->sharpen();
~~~
我們還可以通過矩形的坐標修剪圖像:
~~~
$image->crop($left, $top, $width, $height);
~~~
縮小的圖像可以插入到另一個(所謂的水印)中。
~~~
$blank = Image::fromBlank(320, 240, Image::rgb(52, 132, 210));
$blank->place($image, 0, 0); // place into a position 0px, 0px
// coordinates can be set also in percentage
$blank->place($image, '80%', '75%', 25); // transparency is 25 %
~~~
Nette \ Utils \ Image簡化了從GD擴展中調用所有圖形函數,例如imagefilledrectangle,但使用更易理解的對象方法。
~~~
$white = Image::rgb(255, 255, 255);
$image->filledRectangle(0, 0, $width, $height, $white);
~~~
## 圖像保存
圖像可以保存到文件中:
~~~
$image->save('resampled.jpg');
~~~
自動地,也可以設置圖像的質量和格式(如果格式未設置,它從文件擴展名檢測到):
~~~
$image->save('resampled.jpg', 80, Image::JPEG); // JPEG, quality 80%
~~~
或者,圖像可以保存到變量中:
~~~
$binary = (string) $image;
~~~
或者您可以使用相應的標題Content-Type的設置將其直接發送到瀏覽器:
~~~
// send it like image/jpeg
$image->send();
// send it like image/png
$image->send(Image::PNG);
~~~
這樣的API真的很高興使用,不是嗎?
- Nette簡介
- 快速開始
- 入門
- 主頁
- 顯示文章詳細頁
- 文章評論
- 創建和編輯帖子
- 權限驗證
- 程序員指南
- MVC應用程序和控制器
- URL路由
- Tracy - PHP調試器
- 調試器擴展
- 增強PHP語言
- HTTP請求和響應
- 數據庫
- 數據庫:ActiveRow
- 數據庫和表
- Sessions
- 用戶授權和權限
- 配置
- 依賴注入
- 獲取依賴關系
- DI容器擴展
- 組件
- 字符串處理
- 數組處理
- HTML元素
- 使用URL
- 表單
- 驗證器
- 模板
- AJAX & Snippets
- 發送電子郵件
- 圖像操作
- 緩存
- 本土化
- Nette Tester - 單元測試
- 與Travis CI的持續集成
- 分頁
- 自動加載
- 文件搜索:Finder
- 原子操作