laravel 的 intervention-image 圖像處理筆記
阿新 • • 發佈:2018-05-23
就是 names 世紀 MF format span 配置 更多 繪制
- 安裝:
- https://blog.csdn.net/beyond__devil/article/details/62230610
- 需求:
- PHP >= 5.4
- Fileinfo 擴展
- GD庫 >= 2.0
- Imagick 擴展 >=6.5.7
- composer安裝:
- composer require intervention/image
- laravel配置:
- 1.編輯 config/app.php
- $providers 添加 ‘Intervention\Image\ImageServiceProvider::class‘
- $aliases 添加 ‘‘Image‘ => Intervention\Image\Facades\Image::class‘
- 2.默認使用的是 ‘GD‘ 庫,想修改的話,需要配置驅動,我們來生成配置文件:
- php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravel5"
- 生成 config/image.php 配置文件
- 3.PHP涉及到的配置項:
- memory_limit - 最大內存限制
- upload_max_filesize - 如果上傳圖片時,可能修改
- -----
- 其實,可能還有好多
- max_execution_time - 最大執行時間
- ...
- 基本使用:
- 1.使用 Intervention\Image\ImageManager - 圖片管理類
- use Intervention\Image\ImageManager;
- $manager = new ImageManager(array(‘driver‘ => ‘imagick‘));
- $manager->make(‘public/foo.jpg‘);
- 2.使用 ImageManager 的靜態版本
- use Intervention\Image\ImageManagerStatic as Image;
- Image::configure(array(‘driver‘ => ‘imagick‘)); ------- api中未出現此方法
- Image::make(‘public/foo.jpg‘);
- HTTP響應:
- 1.將圖像直接返回到用戶瀏覽器的最簡單的方法是輸出response()方法。 它將根據當前圖像自動發送HTTP頭,並輸出編碼的圖像數據。
- $img = Image::canvas(800, 600, ‘#ff0000‘);
- echo $img->response(‘jpg‘, 70);
- 2.手動發送HTTP響應
- $img = Image::canvas(800, 600, ‘#ff0000‘);
- header(‘Content-Type: image/png‘);
- echo $img->encode(‘png‘);
- 在laravel中,同上面的2種方法一樣:
- 3.
- $img = Image::canvas(800, 600, ‘#ff0000‘);
- return $img->response();
- 4.
- $img = Image::canvas(800, 600, ‘#ff0000‘);
- $response = Response::make($img->encode(‘png‘));
- $response->header(‘Content-Type‘, ‘image/png‘);
- return $response;
- 圖片上傳:
- 1.直接從 $_FILES 中,獲取 ‘tmp‘ 臨時圖片數據
- $img = Image::make($_FILES[‘image‘][‘tmp_name‘]); // Image::make() 支持這種方式
- $img->fit(300, 200);
- $img->save(‘public/bar.jpg‘);
- 2.在laravel中處理圖片上傳
- Image::make(Input::file(‘photo‘)); // Input::file() 來獲取$_FILES
- 圖片過濾器:
- 圖片過濾器,給了我們非常有用的方式,將多個圖像轉換命令集合在一個專用類中。(可將多個圖像處理步驟,封裝成一個過濾器)。
- Intervention/image,提供了基本接口(Intervention\Image\Filters\FilterInterface),所有的過濾器都需要實現它。
- 調用過濾器:
- $img = Image::make(‘foo.jpg‘);
- $img->filter(new DemoFilter(5));
- 定義過濾器:
- src/Intervention/Image/Filters/DemoFilter.php
- <?php
- namespace Intervention\Image\Filters;
- class DemoFilter implements FilterInterface
- {
- /**
- * Default size of filter effects
- */
- const DEFAULT_SIZE = 10;
- /**
- * Size of filter effects
- *
- * @var integer
- */
- private $size;
- /**
- * Creates new instance of filter
- *
- * @param integer $size
- */
- public function __construct($size = null)
- {
- $this->size = is_numeric($size) ? intval($size) : self::DEFAULT_SIZE;
- }
- /**
- * Applies filter effects to given image
- *
- * @param Intervention\Image\Image $image
- * @return Intervention\Image\Image
- */
- public function applyFilter(\Intervention\Image\Image $image)
- {
- $image->pixelate($this->size);
- $image->greyscale();
- return $image;
- }
- }
- ?>
- 圖像緩存:
- 圖像緩存包,擴展了緩存圖像的能力。
- 緩存包使用laravel的 ‘Illuminate/Cache‘ 包。基於laravel的緩存配置,可以使用 ‘文件系統‘、‘數據庫‘、‘Memcached‘或‘Redis‘ 來作為臨時緩沖存儲
- 原理很簡單。一旦安裝了緩存包,就可以調用靜態緩存方法。每個對 Intervention/Image 類的方法調用,都會被緩存接口捕獲和檢查。如果這個特定的操作序列意境生成過,將直接從緩存中獲取數據,而不是重新執行一遍資源密集型的GD操作
- 安裝:
- composer require intervention/imagecache
- 使用方式:
- $img = Image::cache(function($image){
- $image->make(‘public/foo.jpg‘)->resize(300, 200)->greyscale();
- });
- 基於URL的圖像操作:
- 在Laravel應用程序中,可以使用URL來動態操作圖像。 URL圖像的操作版本將存儲在緩存中,並且將直接加載而無需資源密集型GD操作。
- 圖像必須上傳一次。當通過HTTP請求方式訪問文件,所有操作(例如:調整大小、裁剪)將稍後處理,例如:
- http://yourhost.com/{route-name}/{template-name}/{file-name}
- 1.安裝:
- composer require intervention/image
- composer require intervention/imagecache
- 2.生成配置文件
- php artisan vendor:publish
- 生成 config/imagecache.php
- 3.啟用操作
- 默認情況下,基於URL的圖像操作是關閉的。在imagecache.php配置文件中,來指定 ‘route‘ 配置項
- ‘route‘ => ‘imagecache‘
- 配置好route後,可以通過artisan命令,列出所有已註冊的路有,並檢查新路有是否正確列出:
- php artisan route:list
- 4.定義資源目錄
- 告訴PHP,在哪裏搜索圖片。我們可以定義自己喜歡的任意數量的目錄。例如:定義應用程序的所有上傳目錄。應用程序將在目錄中搜索在路有中提交的文件。
- ‘paths‘ => array(
- ‘storage/uploads/images‘,
- public_path(‘img‘),
- ),
- 在這些目錄中保存具有唯一文件名的圖像文件是有意義的。否則,包將返回首先找到的圖像。
- 註意:
- 出於安全原因,路由僅接受由以下字符組成的文件名:
- a-zA-Z0-9-_/.
- 5.模板
- 模板的定義,就是過濾器類的名稱,可以在其中定義任意操作命令(之前介紹過過濾器)。系統自帶3個基本模板:
- small - 120x90
- medium - 240x180
- large - 480x360
- 我們可以在配置文件中,自由配置可用的模板:
- ‘templates‘ => array(
- ‘small‘ => ‘Intervention\Image\Templates\Small‘,
- ‘medium‘ => ‘Intervention\Image\Templates\Medium‘,
- ‘large‘ => ‘Intervention\Image\Templates\Large‘,
- ),
- 訪問原始圖片:
- original - 使用原始圖像文件,發送HTTP響應
- download - 發送HTTP響應並強制瀏覽器下載原始圖像文件,而不是顯示它。
- 例如:
- http://yourhost.com/{route-name}/original/{file-name}
- 6.圖像緩存的生命周期:
- 一旦第一次訪問了URL,搜索圖片,並根據模板,編輯圖像,並存儲到緩存中。 所以下次訪問URL時,所有的GD操作都被繞過,文件將直接來自緩存
- ‘lifetime‘ => 43200, // 單位是 ‘minutes-分鐘‘
- 支持的格式:
- 圖片格式:
- GD庫:jpeg, png, gif
- Imagick庫:jpeg, png, gif, tif, bmp, ico, psd
- 顏色格式:
- 整數
- $color = Image::make(‘public/foo.jpg‘)->pickColor(10, 10); // pickColor()返回的是整數形式的RGB值
- $img->fill($color);
- 數組
- $img->fill(array(255, 0, 0));
- $img->fill(array(255, 0, 0, 0.5));
- 16進制
- $img->fill(‘#000000‘);
- RGB和RGBA字符串格式
- $img->fill(‘rgb(255, 0, 0)‘);
- $img->fill(‘rgb(255, 0, 0, 0.5)‘);
- 創建圖像:
- 1.canvas($width, $height [, mixed $bgcolor]) - 創建一個空的畫布
- 構造方法,使用給定的寬、高,創建一個新的空的圖像實例。可以選擇性的定義一個背景色。默認畫布背景是透明(transparent)的。
- 示例:
- $img = Image::canvas(800, 600);
- $img = Image::canvas(32, 32, ‘#ff0000‘);
- 2.make($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框架自帶的圖片上傳實例
- 銷毀圖像:
- 1.destroy() - 銷毀圖像
- 在PHP腳本結束前,釋放當前圖像實例相關的內存。通常資源會在腳本結束後,自動釋放。
- 當然,該方法調用後,圖像實例不再可用。
- 示例:
- $img = Image::make(‘public/foo.jpg‘);
- $img->resize(320, 240);
- $img->save(‘public/small.jpg‘);
- $img->destroy();
- 圖像輸出:
- 1.response([string $format [, integer $quality]]) - 直接作為HTTP響應
- 以指定的格式和圖像質量,來發送當前圖像,作為HTTP響應
- $format - 可以是:jpg,png,gif,tif,bmp。默認是jpeg
- $quality - 從0-100.默認是90
- 2.save([string $path [, int $quality]]) - 保存圖像到指定路徑(未指定,則表示覆蓋原圖)
- 將圖像對象的當前狀態保存到文件系統中。可指定路徑和圖像質量。
- 保存到圖像類型通過文件後綴來定義。例如:foo.jpg 圖片將被保存為 ‘JPG‘ 格式。如果未指定可用後綴,首先嘗試圖像的MIME類型,如果失敗,將被編碼為 ‘JPEG‘
- 此外,圖像將始終以RGB顏色模式保存,而沒有嵌入的顏色配置文件。
- $path - 指定圖像數據寫入的文件路徑。如果圖像是從一個存在的文件路徑創建的,同時我們未指定 $path,將會嘗試覆蓋該路徑。
- 示例:
- $img = Image::make(‘public/foo.jpg‘)->resize(300, 200);
- $img->save(‘public/bar.png‘, 60);
- $img->save(‘public/bar.jpg‘);
- 3.stream([mixed $format [, int $quality]]) - 圖像流
- 以給定格式和給定圖像質量,對當前圖像進行編碼,並基於圖像數據,創建新的PSR-7流。
- 4.encode([$format [, $quality]]) - 圖像進行編碼
- 將當前圖片,按給定的格式和圖片質量進行編碼
- $format - jpg、png、gif、tif、bmp、data-url(base64)。默認返回的編碼後的數據。默認類型是 ‘jpeg‘
- $quality - 返回從 0-100。0-最低,100最大。只對 ‘jpg‘ 編碼格式有效,因為png壓縮是無損的,不會影響圖片質量。默認是90
- 示例:
- $jpg = (string) Image::make(‘public/foo.png‘)->encode(‘jpg‘, 75);
- $data = (string) Image::make(‘public/foo.png‘)->encode(‘data-url‘);
- 圖像緩存相關
- 1.cache(Closure $callback [, int $lifetime [,bool $returnObj]]) - 圖像緩存
- $callback - 從Closure回調,創建新的緩存圖像實例。
- $lifetime - 為回調傳遞一個生命周期
- $returnObj - 獲取一個Intervention圖像實例作為返回值,還是直接接收圖像流。
- cache()方法,需要安裝額外的 ‘intervention/imagecache‘ 依賴包
- 示例:
- $img = Image::cache(function($image){
- $image->make(‘public/foo.jpg‘)->resize(300, 200)->greyscale();
- }, 10, true);
- 2.backup($name = ‘default‘) - 圖像狀態備份
- 備份當前圖片的狀態。將圖片的當前狀態備份到 $name。之後,可以調用 reset($name = ‘default‘) 來進行狀態恢復。
- $name默認是‘default‘。我們可以傳遞不同的$name,來記錄圖片處理過程中的多個狀態
- 示例:
- $img = Image::canvas(120, 90, ‘#000‘);
- $img->fill(‘#f00‘);
- $img->backup();
- $img->fill(‘#0f0‘);
- $img->reset();
- 3.reset($name = ‘default‘) - 圖像狀態恢復
- backup()用於備份圖像狀態,reset()用於恢復到之前的某個備份
- 原生圖像處理驅動調用:
- 1.getCore() - GD庫|Imagick庫 對象調用
- 以特定驅動的核心格式,返回當前圖像。如果使用的是 ‘GD‘ 庫,則返回 GD 資源類型;如果使用的是 ‘Imagick‘,則返回一個 Imagick 對象。
- 示例:
- $img = Image::make(‘public/foo.jpg‘);
- $imagick = $img->getCore(); // 返回原始的 ‘imagick‘ 對象
- $imagick->embossImage(0, 1); // 就可以調用 ‘imagick‘ 的方法了
- 調整圖像尺寸:
- 1.resize($width, $height [,Closure $callback]) - 調整圖像尺寸
- 使用給定的寬、高,來調整當前圖像。傳遞一個可選的Closure回調來約束resize命令。
- 回調函數,定義了resize命令的約束。可約束圖像的 ‘寬高比(aspect-ratio)‘ 和 ‘不希望的大小(a unwanted upsizing)‘
- aspectRatio()
- 約束當前圖像的寬高比。作為比例調整大小的快捷方式,可以使用 widen() 和 heighten()
- upsize()
- 保持圖像大小
- 示例:
- $img = Image::make(‘public/foo.jpg‘);
- $img->resize(300, 200);
- $img->resize(300, null);
- $img->resize(null, 200);
- $img->resize(300, null, function($constraint){ // 調整圖像的寬到300,並約束寬高比(高自動)
- $constraint->aspectRatio();
- });
- $img->resize(null, 200, function($constraint){ // 調整圖像的高到200,並約束寬高比(寬自動)
- $constraint->aspectRatio();
- });
- $img->resize(null, 400, function($constraint){ // 阻止可能的尺寸變化(保持圖像大小)
- $constraint->aspectRatio();
- $constraint->upsize();
- });
- 2.widen($width [, Closure $callback]) - 調整圖像寬(保持寬高比)
- 調整圖像的寬到給定的寬度,保持寬高比。傳遞一個可選的回調函數,來應用額外的約束,例如:阻止可能的尺寸變化
- upsize()
- 保持圖像大小
- 3.heighten($height [, Closure $callback]) - 調整圖像高(保持寬高比)
- 調整圖像的高到給定的高度,保持寬高比。傳遞一個可選的回調函數,來應用額外的約束,例如:阻止可能的尺寸變化
- upsize()
- 保持圖像大小
- 4.crop($width, $height [, $x, $y]) - 裁剪圖像
- 使用給定的寬、高,裁剪當前圖像的一個矩形區域。默認從圖像的0.0開始,可傳遞一個坐標,定位裁剪的起始點。
- 示例:
- $img = Image::make(‘public/foo.jpg‘);
- $img->crop(100, 100, 20, 20);
- 5.fit($width [[$height] [, Closure $callback [, $position]]]) - 智能裁剪和調整
- 以一個智能的方式,結合裁剪和調整來格式化圖片。該方法將會自動找到給定的寬、高的最佳寬高比,裁剪並調整到給定尺寸。
- $callback - 回調函數,來約束可能的尺寸變化
- upsize()
- 保持圖像大小
- $position - 自定義裁剪的位置。默認是 ‘中心‘
- top-left
- top
- top-right
- left
- center(默認)
- right
- bottom-left
- bottom
- bottom-right
- 6.resizeCanvas($width, $height [, $anchor [, bool $relative [, $bgcolor]]])
- 調整當前圖像的邊界到給定的寬和高。
- $anchor - 從圖像的哪點開始調整
- top-left
- top
- top-right
- left
- center(默認)
- right
- bottom-left
- bottom
- bottom-right
- $relative - 將模式設置為相對,用以在真實的圖片尺寸上,添加或者減去給定的寬、高。
- $bgcolor - 畫布背景(默認 ‘#000000‘)
- 7.trim([$base [, array $away [, $tolerance [, $feather]]]])
- 以給定顏色修剪圖像空間。
- $base - 定義從什麽位置來選取修剪顏色的點。例如:設置為 ‘bottom-right‘,圖像上的所有顏色將被修剪掉,等同於圖片左下角的顏色。可選的值有:
- top-left(默認)
- bottom-right
- tranparent
- $away - 應該被修剪掉的邊框。你可以添加多個邊框(array),可選的值有:
- top
- bottom
- left
- right
- $tolerance - 定義一個偏差度,修剪相似顏色值。範圍0-100。默認是0
- $feather - 羽化效果
- 有時,在修剪時在對象周圍留下未觸摸的“邊框”可能是有用的。 特別是修剪非實體背景時,您可以展開(正值)或收縮(負值)修剪對象周圍的空間一定量的像素。
- 示例:
- Image::make(‘public/foo.jpg‘)->trim(); // 默認,所有邊框使用 ‘top-left‘ 顏色
- Image::make(‘public/foo.jpg‘)->trim(‘bottom-right‘); // 所有邊框使用 ‘bottom-right‘ 顏色
- Image::make(‘public/foo.jpg‘)->trim(‘transparent‘, array(‘top‘, ‘bottom‘)); // 上、下邊框透明
- Image::make(‘public/foo.jpg‘)->trim(‘top-left‘, ‘left‘); // 只有左邊框,使用 ‘top-left‘ 顏色
- Image::make(‘public/foo.jpg‘)->trim(‘top-left‘, null, 40); // 移除圖像所有邊框+40偏差度
- Image::make(‘public/foo.jpg‘)->trim(‘top-left‘, null, 25, 50); // 移除圖像所有邊框+25偏差度+50px的邊框羽化效果
- 調整圖像:
- 1.gamma($correction) - 伽馬矯正
- 對當前圖像執行伽馬矯正操作
- $correction - 伽馬補償值(gamma compensation value)
- 示例:
- $img = Image::make(‘public/foo.jpg‘);
- $img->gamma(1.6);
- 2.brightness($level) - 亮度
- 改變當前圖像的亮度。$level可選範圍為:-100 - 100。0-表示不改變,-100最小,+100最大。
- 示例:
- $img = Image::make(‘public/foo.jpg‘);
- $img->brightness(35);
- 3.constrast($level) - 對比度
- 改變圖像的對比度。$level可選範圍為:-100 - 100。0-表示不改變,-100最小,+100最大。
- 示例:
- $img = Image::make(‘public/foo.jpg‘);
- $img->constrast(35);
- 4.colorize($red, $green, $blue) - 改變RGB色道
- 使用給定的紅、綠、藍色道,改變當前圖像的RGB顏色。色道值是規範化的,範圍從 -100 - 100。0-表示不改變,-100表示移除圖像上的所有特定顏色,+100表示最大顏色
- 示例:
- $img = Image::make(‘public/foo.jpg‘);
- $img->colorize(-100, 0, 100); // 添加藍,移除紅
- $img->colorize(0, 30, 0); // 給圖片添加部分藍色調
- 5.greyscale() - 灰度
- 將圖像轉換為灰度版本
- 示例:
- $img = Image::make(‘public/foo.jpg‘);
- $image = $img->greyscale();
- 6.flip($mode) - 圖像鏡像
- 給當前圖像,制作鏡像。$mode可以指定為:h-水平鏡像和v-垂直鏡像。默認是h
- 示例:
- $img = Image::make(‘public/foo.jpg‘);
- $img->flip(‘v‘);
- 7.invert() - 反轉圖像顏色
- 反轉當前圖像的所有顏色
- 示例:
- $img = Image::make(‘public/foo.jpg‘)->invert();
- 8.opacity($transparency) - 設置圖像的透明度
- 設置當前圖像的不透明度的百分比。從 100%-0%,100%-不透明|0%-全透明
- 示例:
- Image::make(‘public/foo.jpg‘)->opacity(50);
- Image::make(‘public/foo.jpg‘)->opacity(0);
- 9.orientate() - 旋轉圖像(記得摩點圖像處理,使用了它。Imagick)
- 此方法讀取EXIF圖像配置項 ‘方向‘,並對圖像執行旋轉,以正確顯示圖像。必須從文件路徑實例化圖像,才能正確讀取EXIF數據
- 註意:
- 使用該方法,要求PHP編譯時,必須指定 ‘--enable-exif‘。windows用戶,還必須啟用 ‘mbstring‘ 擴展
- 示例:
- $img = Image::make(‘public/foo.jpg‘)->orientate();
- 10.rotate(float $angle [, string $bgcolor]) - 圖像旋轉
- 將當前圖像,逆時針旋轉給定角度。可定義旋轉後,未覆蓋區域的背景顏色!
- $angle - 旋轉角度
- $bgcolor - 旋轉後,可能出現未覆蓋區域,我們可設置背景色
- 11.mask($source [, bool $mask_with_alpha = false])
- 將給定的圖像資源應用為當前圖像的alpha蒙板,以改變當前透明度。蒙板將調整為當前圖像大小。默認情況下,蒙板的灰度版本會轉換為alpha值,但可通過設置 $mask_with_alpha 以應用世紀的alpha通道。將保持當前圖像的透明度。
- $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框架自帶的圖片上傳實例
- $mask_with_alpha - 設置為true,可將實際的alpha通道作為蒙板,應用於當前圖像,替代顏色值。默認是 false
- 應用效果:
- 1.filter(Intervention\Image\Filters\FilterInterface $filter) - 使用濾鏡
- 給當前圖像,應用自定義的濾鏡效果
- 2.blur($amount = 1) - 高斯模糊
- 在當前圖片上,應用高斯模糊濾鏡。$amount可選範圍為 0-100。(GD庫處理,高強度的高斯模糊會非常占用性能,小心使用)
- 示例:
- $img = Image::make(‘public/foo.jpg‘);
- $img->blur(); // 輕微的高斯模糊
- $img->blur(15); // 高強度的高斯模糊
- 3.sharpen($amount = 10) - 銳化效果
- 銳化當前圖像。$amount可選範圍為 0-100。
- 示例:
- $img = Image::make(‘public/foo.jpg‘);
- $img->sharpen(15);
- 4.pixelate($size) - 像素化效果
- 將像素化效果應用於當前圖像(指定像素化效果的尺寸)
- 5.limitColors($count [, $matte])
- 將當前圖片的現有顏色,轉換為具有給定最大顏色數的顏色表。該函數保留盡可能多的alpha通道信息,並將透明像素與可選的遮罩顏色混合。
- $count - 應在調色板中保留的最大顏色數。設置為null,轉為真彩色(truecolor)
- $matte - 用於混合透明像素的顏色。默認值:無遮罩顏色
- 示例:
- $img = Image::make(‘public/foo.png‘);
- $img->limitColors(255, ‘#f90‘);
- 6.interlace($interlace = true) - 圖像隔行掃描
- 傳遞一個boolean類型參數,切換隔行掃描模式,來確定是否使用隔行掃描或標準模式,對圖像進行編碼。如果jpeg圖像使用隔行掃描模式,圖像將被處理為漸進式jpeg。
- 設置為true-隔行掃描模式|false-標準模式。默認是true
- 示例:
- $img = Image::make(‘public/foo.png‘);
- $img->interlace(); // 開啟隔行掃描
- $img->save();
- $img = Image::make(‘public/interlaced.gif‘);
- $img->interlace(false); // 關閉隔行掃描
- $img->save();
- 畫圖:
- 1.text($text [, $x [, $y [, Closure $callback]]]) - 文字
- 在指定的位置,寫入文本。在回調函數中,可定義更多細節,例如:字體大小,字體文件,對其方式等
- $callback - 回調函數
- file($filepath) - 字體文件。設置True Type Font文件的路徑,或者GD庫內部字體之一的1到5之間的整數值。 默認值:1
- size($size) - 字體大小。字體大小僅在設置字體文件時可用,否則將被忽略。 默認值:12
- color($color) - 字體顏色
- align($align) - 水平對齊方式:left,right,center。默認left
- valign($valign) - 垂直對齊方式:top,bottom,middle。默認bottom
- angle($angle) - 文本旋轉角度。文本將圍繞垂直和水平對齊點逆時針旋轉。 旋轉僅在設置字體文件時可用,否則將被忽略
- 2.pixel($color, $x, $y) - 點
- 在給定的坐標上,以給定的顏色畫單個像素點
- 3.line($x1, $y1, $x2, $y2 [Closure $callback]) - 線
- 在當前圖像上,指定2點畫線。可以在回調函數中,定義線的顏色和寬度
- $callback
- color($color) - 指定線的顏色。默認:#000000
- width($width) - 指定線的寬度。默認:1px。 // GD庫無效!!
- 4.rectangle($x1, $y1, $x2, $y2 [Closure $callback]) - 矩形
- 指定2點坐標,分別代表左上角和右下角,來畫一個矩形。
- 5.polygon(array $points [, Closure $callback]) - 多邊形
- 使用給定的點數據,來畫一個多邊形。可以在回調函數中,定義多變形的外觀
- $callback 可使用下面的方法,來定義圓的外觀:
- background($color) - 定義圓的背景
- border($width, $color) - 定義圓的邊框
- 示例:
- $img = Image::canvas(800, 600, ‘#ddd‘);
- $points = array(
- 40, 50,
- 30, 40,
- 20, 30,
- 10, 20,
- 5, 10,
- );
- $img->polygon($points, function($draw){
- $draw->background(‘#ff0‘);
- $draw->border(1, ‘#f0f‘);
- })
- 6.circle($diameter, $x, $y [,Closure $callback]) - 圓
- 在給定的x、y坐標點上,使用給定的直徑畫一個圓。
- 可以通過回調函數,來定義圓的外觀。
- $callback 可使用下面的方法,來定義圓的外觀:
- background($color) - 定義圓的背景
- border($width, $color) - 定義圓的邊框
- 示例:
- $img = Image::canvas(300, 200, ‘#ddd‘);
- $img->circle(100, 50, 50, function($draw){
- $draw->background(‘#ff0‘);
- $draw->border(1, ‘#f00‘);
- })
- 7.ellipse($width = 10, $height = 10, $x, $y [Closure $callback]) - 橢圓
- 在給定的x、y坐標點,繪制彩色橢圓。可以定義寬度和高度,以及通過可選的閉包回調來設置橢圓的外觀
- $callback 可使用下面的方法,來定義圓的外觀:
- background($color) - 定義圓的背景
- border($width, $color) - 定義圓的邊框
- 圖像的其它處理方法:
- 1.fill($filling [, $x, $y]) - 圖像填充
- 使用給定顏色或另一張圖片來填充當前圖像。傳遞可選的x、y坐標,表示開始填充的位置。
- 如果指定了x、y坐標,原始圖像上該坐標的顏色,將執行泛紅填充(flood fill)。如果未指定坐標,不管下面是什麽,填充整個圖像
- $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框架自帶的圖片上傳實例
- 示例:
- $img = Image::canvas(800, 600);
- $img->fill(‘#ccc‘);
- $img->fill(‘public/foo.jpg‘);
- $img->fill(‘#f0f‘, 0, 0);
- 2.insert($source [, $position [, $x, $y]]) - 插入圖片
- 將一個給定的圖片資源插入到當前圖像中。
- $source - 另一個圖片資源
- $position - 位置(相對於當前圖像)
- top-left(默認)
- top
- top-right
- left
- center
- right
- bottom-left
- bottom
- bottom-right
- $x,$y - 偏移坐標(默認:0.0)
- 在 $position 指定的位置上,再進行相對偏移
- 此方法可用於,將另一張圖像作為水印,因為保持了透明度。
- 示例:
- $img = Image::make(‘public/foo.jpg‘);
- $img->insert(‘public/bar.png‘); // 插入另一個圖片
- $watermark = Image::make(‘public/watermark.png‘); // 創建一個新的圖片實例
- $img->insert($watermark, ‘center‘); // 插入圖片
- $img->insert(‘public/watermark.png‘, ‘bottom-right‘, 10, 10);
- 3.pickColor($x, $y [string $format]) - 選取給定坐標顏色
- 在當前圖像上的指定坐標,獲取顏色,並返回給定的顏色格式
- $format - 顏色格式,可以是:
- array - array(255, 255, 255, 1)
- rgb - rgb(255, 255, 255)
- rgba - rgba(255, 255, 255, 0.5)
- hex - #cccccc
- int - 16776956
- 默認情況下,該方法將像素的RGB值作為數組返回。使用整數格式,將顏色直接傳遞給任意GD庫函數
- 檢索信息:
- 1.width()
- 獲取當前圖片的寬度(單位:px)
- 示例:
- $width = Image::make(‘public/foo.jpg‘)->width();
- 2.height()
- 獲取當前圖片的高度(單位:px)
- 示例:
- $height = Image::make(‘public/foo.jpg‘)->height();
- 3.mime()
- 如果已經圖像已經定義了MIME類型,從當前圖像實例中讀取MIME類型。
- 4.exif([string $key])
- 從當前圖像讀取 ‘Exif‘ 元數據。必須從文件路徑是實例化圖像對象,才能正確讀取EXIF數據
- imagick從2.3.9開始支持exif。PHP編譯時,必須包含 ‘--enable-exif‘ 才能使用這個方法。windows用戶,還必須開啟 ‘mbstring‘ 擴展(PHP手冊有該函數庫)
- $key - 檢索的exif哪個下標
- 5.iptc([string $key])
- 從當前圖像中讀取 ‘IPTC‘ 元數據
- 默認獲取所有元數據,可以傳遞下標,來獲取指定的元數據。沒有發現元數據,返回 ‘NULL‘
- 示例:
- $data = Image::make(‘public/foo.jpg‘)->iptc(); // 獲取所有數據
- $copyright = Image::make(‘public/foo.jpg‘)->iptc(‘Copyright‘); // 獲取 ‘Copyright‘
- 6.filezise()
- 如果實例是從一個真實文件初始化的,獲取當前圖像實例的文件尺寸
- 返回圖像的尺寸大小,單位是 ‘bytes - 字節‘,如果不是從一個文件創建的圖像實例,則返回false
- 示例:
- $img = Image::make(‘public/foo.jpg‘);
- $size = $img->filesize();
laravel 的 intervention-image 圖像處理筆記