W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
CodeIgniter的圖像處理類允許你執(zhí)行以下操作:
圖像處理類支持使用以下圖像庫:GD/GD2和 ImageMagick
與CodeIgniter中的大多數(shù)其他類一樣,你可以通過控制器中調(diào)用Services類的初始化圖像處理類:
$image = Config\Services::image();
你可以將要使用的圖像庫的別名傳遞給服務(wù)功能:
$image = Config\Services::image('imagick');
可用的圖像庫處理程序如下:
如果你要使用ImageMagick圖像庫,則必須要在 application/Config/Images.php 中設(shè)置服務(wù)器上該庫的所在路徑。
注解
ImageMagick處理程序不需要在服務(wù)器上加載imagick擴(kuò)展。只要你的腳本可以訪問該庫并且可以使用exec()
運行在服務(wù)器上,它就可以工作。
無論你執(zhí)行何種圖像的處理方法函數(shù)(調(diào)整大小、裁剪、旋轉(zhuǎn)、使用水?。话阏{(diào)用過程都是相同的。 你將根據(jù)要執(zhí)行的操作設(shè)置一些首選項,然后調(diào)用其中一個你需要的使用的可用處理函數(shù):
$image = Config\Services::image()
->withFile('/path/to/image/mypic.jpg')
->fit(100, 100, 'center')
->save('/path/to/image/mypic_thumb.jpg');
上面的代碼告我們它會查找來自image文件夾中的名為mypic.jpg的圖像,然后使用GD2 image_library圖像庫來創(chuàng)建一個100 x 100像素的新圖像,并將其保存到新文件(the thumb)。 由于它使用fit()方法,它將嘗試根據(jù)所需的寬高比找到要裁剪的圖像的最佳部分,然后裁剪并調(diào)整結(jié)果大小。
在保存新圖像之前,可以根據(jù)需求來通過許多可用方法來處理圖像。原始圖像將保持原樣,而新圖像會通過每個方法傳參,將處理結(jié)果應(yīng)用于直接的結(jié)果之上:
$image = Config\Services::image()
->withFile('/path/to/image/mypic.jpg')
->reorient()
->rotate(90)
->crop(100, 100, 0, 0)
->save('/path/to/image/mypic_thumb.jpg');
此示例將采用相同的圖像并首先修復(fù)任何移動電話的定向問題,圖像將旋轉(zhuǎn)90度,然后從左上角開始將結(jié)果裁剪為100x100像素圖像。結(jié)果將保存成縮略圖。
注解
為了讓圖像處理類可以進(jìn)行任何處理,包含圖像文件的文件夾必須具有寫入權(quán)限。
對于某些操作,圖像處理時可能需要相當(dāng)大量的服務(wù)器內(nèi)存。如果在處理圖像時遇到內(nèi)存不足錯誤,可能需要限制其圖像的最大大小,和/或調(diào)整PHP內(nèi)存限制。
有六種可用的處理方法可以調(diào)用:
這些方法將會返回類實例,如上所示,它們可以鏈接在一起。如果失敗,它們將拋出包含錯誤的消息到 CodeIgniter\Images\ImageException
。 一個好的做法是捕獲異常消息,在失敗時顯示錯誤,如下所示:
try {
$image = Config\Services::image()
->withFile('/path/to/image/mypic.jpg')
->fit(100, 100, 'center')
->save('/path/to/image/mypic_thumb.jpg');
}
catch (CodeIgniter\Images\ImageException $e)
{
echo $e->getMessage();
}
注解
你可以選擇通過在函數(shù)中提交開始/結(jié)束標(biāo)記來指定要應(yīng)用于錯誤的HTML格式,如下所示:
$this-&image_lib-&display_errors('<p&', '</p&');
圖像可以被裁剪,只保留原始圖像的一部分。通常用于創(chuàng)建特定大小/縱橫比匹配的縮略圖圖像。這是用 crop()
方法處理的:
crop(int $width = null, int $height = null, int $x = null, int $y = null, bool $maintainRatio = false, string $masterDim = 'auto')
要從圖像中心取出50x50像素的正方形,你需要首先計算適當(dāng)?shù)膞和y偏移值:
$info = Services::image('imagick')
->withFile('/path/to/image/mypic.jpg')
->getFile()
->getProperties(true);
$xOffset = ($info['width'] / 2) - 25;
$yOffset = ($info['height'] / 2) - 25;
Services::image('imagick')
->withFile('/path/to/image/mypic.jpg')
->crop(50, 50, $xOffset, $yOffset)
->save('path/to/new/image.jpg');
使用 fit()
方法旨在通過執(zhí)行以下步驟幫助簡化以“智能”方式裁剪圖像的一部分:
fit(int $width, int $height = null, string $position = 'center')
這里提供一種更簡單的裁剪方式,可以始終保持縱橫比:
Services::image('imagick')
->withFile('/path/to/image/mypic.jpg')
->fit(100, 150, 'left')
->save('path/to/new/image.jpg');
使用 flatten()
方法旨在在透明圖像(PNG)后面添加背景顏色并將RGBA像素轉(zhuǎn)換為RGB像素
flatten(int $red = 255, int $green = 255, int $blue = 255)
Services::image('imagick')
->withFile('/path/to/image/mypic.png')
->flatten()
->save('path/to/new/image.jpg');
Services::image('imagick')
->withFile('/path/to/image/mypic.png')
->flatten(25,25,112)
->save('path/to/new/image.jpg');
圖像可以沿水平軸或垂直軸翻轉(zhuǎn):
flip(string $dir)
Services::image('imagick')
->withFile('/path/to/image/mypic.jpg')
->flip('horizontal')
->save('path/to/new/image.jpg');
可以使用resize()方法調(diào)整圖像大小以適合你需要的任何維度:
resize(int $width, int $height, bool $maintainRatio = false, string $masterDim = 'auto')
調(diào)整圖像大小時,你可以選擇是保持原始圖像的比例,還是拉伸/壓縮新圖像以適合所需的尺寸。 如果$maintainRatio為true,則$masterDim指定的尺寸將保持不變,而另一個尺寸將更改為與原始圖像的縱橫比相匹配。
Services::image('imagick')
->withFile('/path/to/image/mypic.jpg')
->resize(200, 100, true, 'height')
->save('path/to/new/image.jpg');
使用 rotate() 方法允許你以90度的增量旋轉(zhuǎn)圖像:
rotate(float $angle)
注解
雖然$angle參數(shù)接受float,但它會在進(jìn)程中將其轉(zhuǎn)換為整數(shù)。 如果該值不是上面列出的三個值, 他會拋出一個自CodeIgniterImagesImageException的圖像異常錯誤.
你可以使用text()方法非常簡單地將文本水印疊加到圖像上。 這對于放置版權(quán)聲明,攝影師名稱或簡單地將圖像標(biāo)記為預(yù)覽非常有用,這會使它們最終不會用于其他人的產(chǎn)品上。
text(string $text, array $options = [])
第一個參數(shù)是你要顯示的文本字符串。第二個參數(shù)是一個選項數(shù)組,允許你指定文本的顯示方式:
Services::image('imagick')
->withFile('/path/to/image/mypic.jpg')
->text('Copyright 2017 My Photo Co', [
'color' => '#fff',
'opacity' => 0.5,
'withShadow' => true,
'hAlign' => 'center',
'vAlign' => 'bottom',
'fontSize' => 20
])
->save('path/to/new/image.jpg');
可識別的選項如下:
注解
ImageMagick驅(qū)動程序無法識別fontPath的完整服務(wù)器路徑。相反,需要你提供希望使用的已安裝系統(tǒng)字體之一的名稱,即如Calibri。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: