Intervention Image是一個開源的PHP影像處理和操作庫。 它提供了一種建立,編輯和合成影像的簡便且富有表現力的方式,並支援當前兩個最常見的影像處理庫GD Library和Imagick。
編寫該類是為了使PHP影像操作更容易且更具表現力。 無論您是要建立影像縮圖,水印還是對大型影像檔案進行格式化,Intervention Image都可以幫助您以最少的程式碼行輕鬆地管理每個任務。
該庫遵循FIG標準PSR-2,以確保共享的PHP程式碼之間的高度互操作性,並且經過了完全的單元測試。
一、 環境要求
- PHP >=5.4
- Fileinfo Extension
- GD Library (>=2.0)
- Imagick PHP extension (>=6.5.7)
二、 安裝及配置
composer require intervention/image
- 在
app/config/app.php
新增 providers 陣列中新增如下程式碼:
Intervention\Image\ImageServiceProvider::class,
- 在
app/config/app.php
新增 aliases 陣列中新增如下程式碼:
'Image' => Intervention\Image\Facades\Image::class,
- 釋出擴充套件生成
config/image.php
配置檔案
php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravelRecent"
- 在
config/image.php
修改驅動為imagick
'driver' => 'imagick'
三、常用API 及用法
建立影像
public Intervention\Image\ImageManager canvas(integer $width, integer $height, [mixed $bgcolor])
引數 |
描述 |
width |
寬度 |
height |
高度 |
bgcolor |
背景顏色(可選) |
$img = Image::canvas(100, 100);
$img = Image::canvas(100, 100, '#ff0000');
public static Intervention\Image\ImageManager make(mixed $source)
引數 |
描述 |
source |
該方法高度可變,可讀取下面列出的所有輸入型別:
string 檔案系統的圖片路徑,
string 圖片的URL地址(allow_url_fopen必須啟用),
string 二進位制圖片資料,
string data-url編碼的圖片資料,
string base64編碼的圖片資料,
resource gd型別的PHP資源(當使用GD庫),
object Imagick例項(當使用Imagick庫),
object Intervention\Image\Image 例項,
object SplFileInfo instance (To handle Laravel file uploads via Symfony\Component\HttpFoundation\File\UploadedFile) laravel框架自帶的圖片上傳例項 |
$img = Image::make('public/foo.jpg');
$img = Image::make(imagecreatefromjpeg('public/foo.jpg'));
$img = Image::make('http://example.com/example.jpg');
$img = Image::make(Input::file('photo'));
改變影像尺寸的方法
public Intervention\Image\Image resize (integer $width, integer $height, [Closure $callback])
引數 |
描述 |
width |
設定寬度 |
height |
設定高度 |
callback |
閉包回撥函式(可選),aspectRatio() 用於約束寬高比例,upsize() 防止影像放大(如果調整寬度超過影像原始寬度時,就保持影像原始寬度不變) |
$img->resize(300, 200);
$img->resize(300, null, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
});
public Intervention\Image\Image widen(integer $width, [Closure $callback])
引數 |
描述 |
width |
設定寬度 |
callback |
閉包回撥函式(可選),upsize() 防止不必要的影像放大 |
$img = Image::make('public/foo.jpg')->widen(300);
$img = Image::make('public/foo.jpg')->widen(300, function ($constraint) {
$constraint->upsize();
});
heighten()
和 widen()
功能類似
public Intervention\Image\Image crop(int $width, int $height, [int $x, int $y])
引數 |
描述 |
width |
裁剪矩形寬度 |
height |
裁剪矩形高度 |
x |
裁剪矩形左上角的X座標。 預設情況下,矩形部分將在當前影像上居中 |
y |
裁剪矩形左上角的Y座標。 預設情況下,矩形部分將在當前影像上居中 |
$img = Image::make('public/foo.jpg');
$img->crop(200, 100, 25, 25);
$img->crop(200, 100);
fit()
以智慧的方式,結合裁剪和調整來格式化圖片,該方法將會自動找到給定的寬、高的最佳寬高比,裁剪並調整到給定尺寸
public Intervention.mage.mage fit( int $width, [ [int $height], [Closure $callback, [ string $position ]] ])
引數 |
描述 |
width |
裁剪出最合適的寬高比後,影像的寬度將被調整為該寬度 |
height |
裁剪出最合適的寬高比後,影像的高度將被調整為該高度(可選), 如果未給出高度,則方法將使用與寬度相同的值 |
callback |
閉包回撥函式(可選),upsize() 防止不必要的影像放大 |
position |
設定裁剪的位置(可選), 可選值:top-left、 top、top-right 、left、center (default)、right、bottom-left 、bottom、bottom-right |
$img = Image::make('public/foo.jpg');
$img->fit(100);
$img->fit(100, 120, function ($constraint) {
$constraint->upsize();
});
resizeCanvas()
調整影像的邊界到給定的寬和高
public Intervention\Image\Image resizeCanvas (int $width, int $height, [string $anchor, [boolean $relative, [mixed $bgcolor]]])
引數 |
描述 |
width |
絕對模式下影像的新寬度 或 相對模式下在原來圖片尺寸上,新增或者減去給定的寬、高 |
height |
絕對模式下影像的新高度,或相對模式下要從高度增加或減少的畫素數量 |
anchor |
設定要調整影像大小的位置。 例如,如果將錨點設定為左下角,則此邊將被固定,並且會將width / height的值新增或減去到影像的右上角,可選值:top-left、 top、top-right 、left、center (預設)、right、bottom-left 、bottom、bottom-right |
relative |
確定調整大小將在相對模式下進行, 這意味著width或height的值將與影像的當前高度相加或相減, 預設值:false |
bgcolor |
影像新區域的背景色, 可以以不同的顏色格式傳遞背景色, 預設值:#ffffff,如果輸出格式支援則透明 |
$img = Image::make('public/foo.jpg');
$img->resizeCanvas(300, 200);
$img->resizeCanvas(300, null);
$img->resizeCanvas(300, 200, 'bottom-right');
$img->resizeCanvas(10, -10, 'center', true,);
$img->resizeCanvas(1280, 720, 'center', false, 'ff00ff');
繪畫的方法
public Intervention\Image\Image text(string $text, [integer $x, [integer $y, [Closure $callback]]])
引數 |
描述 |
text |
要寫入的文字 |
x |
定義寫入文字第一個字元基點的 X 座標(可選), 預設值:0 |
y |
定義寫入文字第一個字元基點的 Y 座標(可選), 預設值:0 |
callback |
回撥函式(可選): file($filepath) 設定字型檔案的路徑或GD 庫內部字型,範圍1到5之間的整數值,預設值1
size($size) 大小,字型大小僅在設定字型檔案時可用,否則將被忽略, 預設值:12
color($color) 顏色
align($align) 水平對齊方式:left、right、center,預設left
valign($valign) 垂直對齊方式:top、bottom、middle,預設bottom
angle($angle) 旋轉角度,文字將圍繞垂直和水平對齊點逆時針旋轉, 旋轉僅在設定字型檔案時可用,否則將被忽略 |
$img = Image::make(''public/foo.png');
$img->text('測試文字', 50,50, function($font) {
$font->file('public/Alibaba-PuHuiTi-Light.ttf');
$font->size(24);
$font->color('#000');
});
pixel()
繪製點( 在給定的座標上,以給定的顏色繪製單個畫素點)
public Intervention\Image\Image pixel(mixed $color, integer $x, integer $y)
引數 |
描述 |
color |
顏色 |
x |
X座標 |
y |
Y座標 |
$img = Image::canvas(100, 100, '#ddd');
$img->pixel('#0000ff', 32, 32);
public Intervention\Image\Image line(int $x1, int $y1, int $x2, int $y2, [Closure $callback])
引數 |
描述 |
x1 |
起點的X座標 |
y1 |
起點的Y座標 |
x2 |
終點的X座標 |
y2 |
終點的Y座標 |
callback |
回撥函式( 可選 ): color() 設定顏色, 預設值:#000000 width() 設定線條的寬度(GD驅動程式不提供該選項)預設值:1px |
$img = Image::make('public/foo.jpg');
$img->line(10, 145, 185, 145, function($draw){
$draw->color('#f00');
$draw->width(1);
});
rectangle()
繪製矩形(左上角位於x,y點1,右下角位於x,y點2)
public Intervention\Image\Image rectangle(int $x1, int $y1, int $x2, int $y2, [Closure $callback])
引數 |
描述 |
x1 |
矩形左上角點的X座標 |
y1 |
矩形左上角點的Y座標 |
x2 |
矩形右下角點的X座標 |
y2 |
矩形右下角點的Y座標 |
callback |
回撥定義整體外觀(可選 ): background($color) 設定背景色 ,border($width,$color) 設定矩形的邊框 |
$img = Image::make('public/foo.jpg');
$img->rectangle(5, 95, 190, 143, function($draw){
$draw->border(2, '#f00');
});
public Intervention\Image\Image circle( integer $diameter, integer $x, integer $y, [Closure $callback] )
引數 |
描述 |
diameter |
直徑 |
pos_x |
圓心X座標 |
pos_y |
圓心Y座標 |
callback |
回撥定義整體外觀 (可選 ):
background($color) 設定背景色
border($width, $color) 設定邊的寬度和顏色 |
$img = Image::canvas(300, 200, '#ddd');
$img->circle(10, 100, 100, function ($draw) {
$draw->background('#0000ff');
$draw->border(1, '#f00');
});
public Intervention\Image\Image ellipse(int $width, int $height, int $x, int $y, [Closure $callback])
引數 |
描述 |
width |
橢圓的寬度, 預設值:10 |
height |
橢圓高度, 預設值:10 |
x |
中心點的 X 座標 |
y |
中心點的 Y 座標 |
callback |
回撥定義整體外觀(可選 ):
background($color) 設定背景色,border($width, $color) 設定邊的寬度和顏色 |
$img = Image::make('public/foo.jpg');
$img->ellipse(200, 80, 100, 118, function ($draw) {
$draw->border(1, '#ff0000');
});
*polygon()
繪製多邊形
public Intervention\Image\Image polygon(array $points, [Closure $callback])
引數 |
描述 |
points |
各個角的座標,格式為一維陣列 ,例如[ 0, 0, 1100, 0, 1100, 250] |
callback |
回撥定義整體外觀(可選 ):
background($color) 設定背景色,
border($width, $color) 設定邊的寬度和顏色 |
$img = Image::canvas(800, 600, '#ddd');
$img->polygon([
0, 0,
1100, 0,
1100, 250
], function ($draw) {
$draw->background('#0000ff');
$draw->border(1, '#ff0000');
});
影像的其它處理方法
public Intervention\Image\Image fill(mixed $filling, [integer $x, integer $y])
引數 |
描述 |
filling |
填充顏色或影像,影像資源格式如下:
string 檔案系統的圖片路徑
string 圖片的 URL 地址(allow_url_fopen必須啟用)
string 二進位制圖片資料
string data-url 編碼的圖片資料
string base64 編碼的圖片資料
resource gd 型別的 PHP 資源(當使用 GD 庫)
object Imagick 例項(當使用Imagick庫)
object Intervention\Image\Image 例項
object SplFileInfo instance (To handle Laravel file uploads via Symfony\Component\HttpFoundation\File\UploadedFile) laravel 框架自帶的圖片上傳例項 |
x |
填充起始點的X軸座標(可選) |
y |
填充起始點的Y軸座標(可選) |
如果指定了x、y座標,則將基於此位置的顏色來填充,未指定座標時填充整個影像
圖形學中Flood Fill是 漫水填充,是用來填充區域的。就好比在一個地方一直倒水,水會往四周滿延開,直到高地阻擋。Flood Fill就是從一個點開始往四周尋找相同的點填充,直到有不同的點為止。
$img = Image::canvas(800, 600);
$img->fill('#cccccc');
$img->fill('tile.png');
$img->fill('#ff00ff', 0, 0);
public Intervention\Image\Image insert(mixed $source, [string $position, [integer $x, integer $y]])
引數 |
描述 |
source |
要插入的影像, 該方法可以處理以下型別的輸入:
string 檔案系統的圖片路徑
string 圖片的URL 地址(allow_url_fopen必須啟用)
string 二進位制圖片資料
string data-url 編碼的圖片資料
string base64編碼的圖片資料
resource gd 型別的 PHP 資源(當使用 GD 庫)
object Imagick 例項(當使用 Imagick 庫)
object Intervention\Image\Image 例項
object SplFileInfo instance (To handle Laravel file uploads via Symfony\Component\HttpFoundation\File\UploadedFile) laravel 框架自帶的圖片上傳例項 |
position |
插入影像的位置(可選),引數:
top-left (預設)
top
top-right
left
center
right
bottom-left
bottom
bottom-right |
x |
X 偏移座標 預設值:0(可選) |
y |
Y 偏移座標 預設值:0(可選) |
$img = Image::make('public/foo.jpg');
$img->insert('public/watermark.png', 'bottom-right', 10, 10);
獲取影像資訊常用的方法
$width = Image::make('public/foo.jpg')->width();
height()
功能和 width()
類比
輸出影像資料的方法
引數 |
描述 |
path |
設定影像儲存路徑(可選),如果影像是從一個存在的檔案路徑建立的,同時我們未指定 $path ,將會嘗試覆蓋該路徑 |
quality |
設定影像質量(可選)範圍從0(質量差,小檔案)到100(最佳質量,大檔案), 僅當JPG格式時有用,因為PNG壓縮是無損的,並且不會影響影像質量, 預設值為90 |
format |
設定影像將被儲存的格式(可選) |
$img = Image::make('public/foo.jpg')->resize(300, 200);
$img->save('public/foo', 80, 'jpg');
public Intervention\Image\Image response([string $format, [integer $quality]])
引數 |
描述 |
format |
設定影像的格式( 可選),jpg、png、gif、tif、bmp,預設是jpeg |
quality |
設定影像質量( 可選,範圍從0(質量差,小檔案)到100(最佳質量,大檔案), 僅當JPG格式時有用,因為PNG壓縮是無損的,並且不會影響影像質量, 預設值為90 |
$img = Image::canvas(800, 600, '#ff0000');
echo $img->response();
public Intervention\Image\Image encode([mixed $format, [int $quality]])
引數 |
描述 |
format |
編碼格式( 可選): jpg、png、gif、tif、bmp、data-url(base64)。預設返回的編碼後的資料。預設型別是 jpeg |
quality |
設定影像質量( 可選),範圍從0(質量差,小檔案)到100(最佳質量,大檔案), 僅當JPG格式時有用,因為PNG壓縮是無損的,並且不會影響影像質量, 預設值為90 |
$jpg = (string) Image::make('public/foo.png')->encode('jpg', 75);
$data = (string) Image::make('public/bar.png')->encode('data-url');
本作品採用《CC 協議》,轉載必須註明作者和本文連結