使用 Intervention/image 對 Laravel 專案中的圖片進行處理
阿新 • • 發佈:2019-01-03
在 Laravel 5 中整合 Intervention Image 實現對圖片的建立、修改和壓縮處理
Intervention Image是一個PHP圖片操作處理庫,為圖片建立、修改及壓縮等處理提供了便捷方式。此外,還提供了服務提供者和門面以便整合到Laravel應用中。
1、安裝
安裝Intervention Image之前,需要確保PHP版本>=5.4並且安裝了Fileinfo擴充套件,以及GD庫(>=2.0)或者Imagick擴充套件(>=6.5.7)。
我們使用Composer在命令列安裝最新版本的Intervention Image:
composer require intervention/image
執行命令後,會在專案composer.json檔案中的require中增加如下圖所示:
2、整合到Laravel
前面已經提到,Intervention Image 提供了相應的服務提供者和門面以便整合到Laravel應用。
安裝好Intervention Image後,開啟config/app.php
,註冊如下服務提供者到$providers
陣列:
Intervention\Image\ImageServiceProvider::class
然後新增如下門面到$aliaes
陣列:
'Image' => Intervention\Image\Facades\Image::class
這樣我們就可以在Laravel應用程式碼中直接使用Image
了。
3. 基礎用法
使用時,如果laravel版本較高的已經引入名稱空間的,需要在使用的時候,引用一下Image的名稱空間,否則找不到該類。
// 修改指定圖片的大小 $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);
4.具體用法
讀取影象
Intervention Image讀取影象超級簡單,你只需要給定一個路徑到make()方法,其他的煩心事Intervention Image來搞定。從檔案讀影象
$img = Image::make('photo.jpg');
這個方法是高度定製的,不只能用路徑,下面的輸入格式都可以:
- 基於檔案系統的影象路徑
- 影象URL (
allow_url_fopen
必須啟用). - 二進位制影象資料
- Data-URL 編碼影象資料
- Base64 編碼影象資料
- PHP資源型別的gd.(在使用 GD 驅動時)
- Imagick例項 (在使用 Imagick 驅動時)
- Intervention\Image\Image 例項
- SplFileInfo 例項 (用來處理器Laravel 檔案上傳 通過 Symfony\Component\HttpFoundation\File\UploadedFile)
可以去API文件看更多例子。
建立影象如果想生成一幅空影象,可以用canvas()並傳入寬,高。背景顏色是可選的,如果沒有傳入,預設是透明背景。 建立新的影象與背景顏色
$img = Image::canvas(800, 600, '#ccc');
建立新影象的更多例子,去看API文件。
編輯影象 在使用 make() 或者 canvas()建立一個新影象例項後,可以使用其他所有的方法到這個例項。 通常每個命令返回一個修改後的Intervention\Image\Image例項,所以可以鏈式呼叫。方法鏈:
$img = Image::make('foo.jpg')->resize(320, 240)->insert('watermark.png');
看看下面的列表的一些方法。
改變影象尺寸的方法: 調整影象的方法: 應用效果的方法: 繪畫的方法: 檢索資訊的方法: 輸出影象 從一個影象物件建立實際影象資料,通過方法 encode 生成編碼影象資料,或者用 save 寫一個影象到檔案系統,也可以用當前影象資料傳送一個HTTP響應。儲存圖片到檔案系統:
Image::make('foo.jpg')->resize(300, 200)->save('bar.jpg');
輸出影象資料的方法: