## intervention/image使用
### 不依賴與其他擴展包
#### 參考
- 官網 http://image.intervention.io/api/backup
- PHP圖像處理組件:Intervention/image
https://www.helloweba.net/php/545.html
- Intervention/image 圖片處理
https://www.cnblogs.com/jxl1996/p/10255742.html
#### 前置條件
該組件需要滿足以下條件才可以正常運行:
* PHP >= 5.4
* 需要支持Fileinfo擴展
* GD庫 > 2.0 或者 Imagick擴展 >= 6.5.7
#### 安裝
使用 composer 安裝:
~~~
composer require intervention/image
~~~
#### 使用
在使用 Intervention Image 的時候, 你只需要給 ImageManager 傳一個數組參數就可以完成 GD 或 Imagick 庫之間的互相切換。
~~~
// 引入 composer autoload
require 'vendor/autoload.php';
// 導入 Intervention Image Manager Class
use Intervention\Image\ImageManager;
// 通過指定 driver 來創建一個 image manager 實例
$manager = new ImageManager(array('driver' => 'imagick'));
// 最后創建 image 實例
$image = $manager->make('public/foo.jpg')->resize(300, 200);
~~~
另外你也可以使用 ImageManager 的靜態版本, 如下所示:
~~~
// 引入 composer autoload
require 'vendor/autoload.php';
// 導入 Intervention Image Manager Class
use Intervention\Image\ImageManagerStatic as Image;
// 通過指定 driver 來創建一個 image manager 實例 (默認使用 gd)
Image::configure(array('driver' => 'imagick'));
// 最后創建 image 實例
$image = Image::make('public/foo.jpg')->resize(300, 200);
~~~
#### 調整尺寸
當上傳的圖片尺寸不合適時,可以將圖片重新調整尺寸。
1.調整圖片為固定尺寸300x200像素:
~~~
$img = Image::make('public/foo.jpg')
$img->resize(300, 200);
~~~
僅調整圖片寬度為300像素:
~~~
$img->resize(300, null);
~~~
僅調整圖片高度為200像素:
~~~
$img->resize(null, 200);
~~~
調整圖片寬度為300像素,高度根據寬度等比例縮放:
~~~
$img->resize(300, null, function ($constraint) {
$constraint->aspectRatio();
});
~~~
調整圖片高度為200像素,高度根據高度等比例縮放:
~~~
$img->resize(null, 200, function ($constraint) {
$constraint->aspectRatio();
});
~~~
#### 裁剪圖片
使用方法`crop(int $width, int $height, [int $x, int $y])`可以將圖片裁剪成合適的尺寸。
~~~
$img = Image::make('public/foo.jpg');
$img->crop(100, 100, 25, 25);
~~~
以上代碼將圖片從坐標x:25,y:25開始裁剪成100x100像素大小的圖片。
#### 圖片水印
使用方法:`insert(mixed $source, [string $position, [integer $x, integer $y]])`可以給圖片添加水印圖片,方法中第一個參數是水印圖片,第二個參數是水印的位置,支持9個位置,最后兩個參數是水印的相對$position參數的位移。
要想給圖片加個水印圖標,可以參照以下代碼:
~~~
// 修改指定圖片的大小
$img = Image::make('images/avatar.jpg')->resize(200, 200);
// 插入水印, 水印位置在原圖片的右下角, 距離下邊距 10 像素, 距離右邊距 15 像素
$img->insert('images/watermark.png', 'bottom-right', 15, 10);
// 將處理后的圖片重新保存到其他路徑
$img->save('images/new_avatar.jpg');
/* 上面的邏輯可以使用鏈式表達式 */
$img = Image::make('images/avatar.jpg')->resize(200, 200)->insert('images/new_avatar.jpg', 'bottom-right', 15, 10);
~~~
這時你查看新生成的圖片new\_avatar.jpg的右下角會有水印圖標。
#### 圖片緩存
要想緩存圖片,先得安裝另外一個組件:imagecache。
~~~
composer require intervention/imagecache
~~~
我們使用方法`cache( Closure $callback, [int $lifetime, [bool $returnObj]] )`,可以實現圖片緩存功能。第2個參數`$lifetime`是緩存時間,默認為5,單位分鐘。
~~~
$img = Image::cache(function($image) {
$image->make('public/foo.jpg')->resize(300, 200)->greyscale();
}, 10, true);
~~~
以上代碼將圖片foo.jpg重置大小為300x200,并且變成灰色,保存在緩沖區,緩存過期時間為10分鐘。
#### 圖片根據URL參數動態處理大小
當你上傳一張圖片后需要生成多種尺寸的圖片,比如常見的頭像尺寸就有多個尺寸以滿足不同應用展示。那么我們的解決辦法有:1.上傳時就生成裁剪好多種相應的尺寸,2.根據請求帶參數的URL來生成不同尺寸的圖片。方法1有局限性,必須先設定尺寸,方法2比較靠譜,根據傳遞的參數,生成所需尺寸的圖片,而且結合圖片緩存功能,讓生成的圖片緩存起來,那么在緩存期限內,多次請求同一個URL是不會重復生成圖片的。以下是個簡單的示例:
~~~
<?php
require 'vendor/autoload.php';
use Intervention\Image\ImageManagerStatic as Image;
$s = isset($_GET['s']) ? $_GET['s'] : 'medium';
switch ($s) {
case 'small': //60x60 px
$imgName = 'public/60x60.jpg';
$width = 60;
$height = 60;
break;
case 'medium': //150x150
$imgName = 'public/150x150.jpg';
$width = 150;
$height = 150;
break;
case 'large': //300x300
$imgName = 'public/300x300.jpg';
$width = 300;
$height = 300;
break;
default:
$imgName = 'public/150x150.jpg';
$width = 150;
$height = 150;
break;
}
$img = Image::cache(function($image) use ($imgName, $width, $height) {
$image->make('public/foo.jpg')->resize($width, $height)->save($imgName);
}, 600); //緩存:600min
echo $imgName;
~~~
根據傳遞的參數s,生成不同尺寸的圖片,并且緩存600分鐘。
- 說明
- PHP快遞模式(一鍵同步多服務器程序文件)
- 多服務器文件md5對比
- 差異文件打包壓縮
- 上傳壓縮包
- 接收壓縮包
- 下載壓縮包
- 解壓覆蓋文件
- 數據庫同步
- 數據字典與數據庫創建
- 數據表測試數據
- 文件對比方法
- think-orm包
- think-orm數據操作模型包
- think-orm數據庫操作包
- think-migration數據庫遷移包
- think-migration數據庫填充數據
- think-migration數據庫創建數據表
- think-migration數據庫查詢數據
- Phinx數據庫遷移包
- Phinx數據庫填充數據
- Phinx數據庫創建數據表
- Phinx數據庫查詢數據
- 統一生成數據表,模型與數據表數據包
- 統一生成數據表
- 統一生成數據表數據
- 統一生成數據表模型
- 在線文檔與測試服務
- 自動生成api接口在線測試
- 自動生成api在線文檔
- 自動生成api接口ajax測試示例
- 管理后臺頁面(可以多個)
- 后臺首頁
- 后臺配置頁面
- 列表頁面
- 表單頁面
- 樹狀列表頁面
- 樹狀表單頁面
- 管理后臺程序
- 樹狀表單添加與修改保存
- 一般表單添加與修改保存
- 樹狀列表展示
- 一般列表
- 配置頁面
- 文件壓縮與解壓
- 文件壓縮
- 文件解壓
- 仿token操作
- 生成token
- 解析token
- 加解密組件hashids/hashids
- 隨機事件
- 隨機數生成
- 隨機字符串
- 隨機中文字符串
- 隨機中文姓名
- 隨機密碼串
- redis操作
- 異步操作
- 后臺表單操作
- 后臺列表頁面操作
- 模板文件生成新文件操作
- 按模板生成文件
- 生成模型文件
- 生成門面類
- 字符串操作
- 字符串包含
- 字符串排除前一個字符
- 字符串排除前N個字符
- 字符串排除前面一個字符串
- 字符串排除后一個字符
- 字符串排除后N個字符
- 字符串排除后面一個字符串
- 字符串截取
- 數組操作
- 交集
- 并集
- 差集
- 時間戳操作
- 上個月第一天日期
- 上個月最后一天日期
- 本月第一天日期
- 本月最后一天日期
- 下個月第一天日期
- 下個月最后一天日期
- 日期和時間處理組件-Carbon手冊
- 日期和時間處理組件-Carbon
- PHP 使用Carbon擴展進行時間處理
- Carbon類
- bootstrap操作
- 表格
- 警告框
- 徽章
- 文件操作
- 文件上傳
- 圖片操作
- 圖片上傳
- 圖片壓縮
- 圖片水印
- intervention/image使用
- log日志操作
- url操作
- url生成實例
- url解析實例
- 樹狀操作
- workerman操作
- 數據庫備份
- 門面操作
- 門面操作測試
- 數據字典生成
- 二維碼操作
- 二維碼生成
- logo二維碼
- think-cache緩存
- phpoffice/phpexcel使用
- Curl采集包
- 使用Guzzle執行HTTP請求
- fzaninotto/Faker中文填充數據表
- 安裝faker
- Faker創建假數據
- Faker基礎數據(英文)
- faker的Lorem(中文)
- 生成Person人物信息
- 生成Address地址信息
- 生成手機號Phone Number
- 生成公司Company信息
- 生成其他中文信息
- 生成時間日期Datetime