W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
CodeIgniter的圖像處理類(lèi)允許你執(zhí)行以下操作:
圖像處理類(lèi)支持使用以下圖像庫(kù):GD/GD2和 ImageMagick
與CodeIgniter中的大多數(shù)其他類(lèi)一樣,你可以通過(guò)控制器中調(diào)用Services類(lèi)的初始化圖像處理類(lèi):
$image = Config\Services::image();
你可以將要使用的圖像庫(kù)的別名傳遞給服務(wù)功能:
$image = Config\Services::image('imagick');
可用的圖像庫(kù)處理程序如下:
如果你要使用ImageMagick圖像庫(kù),則必須要在 application/Config/Images.php 中設(shè)置服務(wù)器上該庫(kù)的所在路徑。
注解
ImageMagick處理程序不需要在服務(wù)器上加載imagick擴(kuò)展。只要你的腳本可以訪問(wèn)該庫(kù)并且可以使用exec()
運(yùn)行在服務(wù)器上,它就可以工作。
無(wú)論你執(zhí)行何種圖像的處理方法函數(shù)(調(diào)整大小、裁剪、旋轉(zhuǎn)、使用水印),一般調(diào)用過(guò)程都是相同的。 你將根據(jù)要執(zhí)行的操作設(shè)置一些首選項(xiàng),然后調(diào)用其中一個(gè)你需要的使用的可用處理函數(shù):
$image = Config\Services::image()
->withFile('/path/to/image/mypic.jpg')
->fit(100, 100, 'center')
->save('/path/to/image/mypic_thumb.jpg');
上面的代碼告我們它會(huì)查找來(lái)自image文件夾中的名為mypic.jpg的圖像,然后使用GD2 image_library圖像庫(kù)來(lái)創(chuàng)建一個(gè)100 x 100像素的新圖像,并將其保存到新文件(the thumb)。 由于它使用fit()方法,它將嘗試根據(jù)所需的寬高比找到要裁剪的圖像的最佳部分,然后裁剪并調(diào)整結(jié)果大小。
在保存新圖像之前,可以根據(jù)需求來(lái)通過(guò)許多可用方法來(lái)處理圖像。原始圖像將保持原樣,而新圖像會(huì)通過(guò)每個(gè)方法傳參,將處理結(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ù)任何移動(dòng)電話的定向問(wèn)題,圖像將旋轉(zhuǎn)90度,然后從左上角開(kāi)始將結(jié)果裁剪為100x100像素圖像。結(jié)果將保存成縮略圖。
注解
為了讓圖像處理類(lèi)可以進(jìn)行任何處理,包含圖像文件的文件夾必須具有寫(xiě)入權(quán)限。
對(duì)于某些操作,圖像處理時(shí)可能需要相當(dāng)大量的服務(wù)器內(nèi)存。如果在處理圖像時(shí)遇到內(nèi)存不足錯(cuò)誤,可能需要限制其圖像的最大大小,和/或調(diào)整PHP內(nèi)存限制。
有六種可用的處理方法可以調(diào)用:
這些方法將會(huì)返回類(lèi)實(shí)例,如上所示,它們可以鏈接在一起。如果失敗,它們將拋出包含錯(cuò)誤的消息到 CodeIgniter\Images\ImageException
。 一個(gè)好的做法是捕獲異常消息,在失敗時(shí)顯示錯(cuò)誤,如下所示:
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();
}
注解
你可以選擇通過(guò)在函數(shù)中提交開(kāi)始/結(jié)束標(biāo)記來(lái)指定要應(yīng)用于錯(cuò)誤的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像素的正方形,你需要首先計(jì)算適當(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()
方法旨在通過(guò)執(zhí)行以下步驟幫助簡(jiǎn)化以“智能”方式裁剪圖像的一部分:
fit(int $width, int $height = null, string $position = 'center')
這里提供一種更簡(jiǎn)單的裁剪方式,可以始終保持縱橫比:
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)整圖像大小時(shí),你可以選擇是保持原始圖像的比例,還是拉伸/壓縮新圖像以適合所需的尺寸。 如果$maintainRatio為true,則$masterDim指定的尺寸將保持不變,而另一個(gè)尺寸將更改為與原始圖像的縱橫比相匹配。
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,但它會(huì)在進(jìn)程中將其轉(zhuǎn)換為整數(shù)。 如果該值不是上面列出的三個(gè)值, 他會(huì)拋出一個(gè)自CodeIgniterImagesImageException的圖像異常錯(cuò)誤.
你可以使用text()方法非常簡(jiǎn)單地將文本水印疊加到圖像上。 這對(duì)于放置版權(quán)聲明,攝影師名稱(chēng)或簡(jiǎn)單地將圖像標(biāo)記為預(yù)覽非常有用,這會(huì)使它們最終不會(huì)用于其他人的產(chǎn)品上。
text(string $text, array $options = [])
第一個(gè)參數(shù)是你要顯示的文本字符串。第二個(gè)參數(shù)是一個(gè)選項(xiàng)數(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');
可識(shí)別的選項(xiàng)如下:
注解
ImageMagick驅(qū)動(dòng)程序無(wú)法識(shí)別fontPath的完整服務(wù)器路徑。相反,需要你提供希望使用的已安裝系統(tǒng)字體之一的名稱(chēng),即如Calibri。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: