用於調整大小、縮放和裁剪影像的 PHP 函式庫。
如果您不想在伺服器上裁剪、調整大小和儲存影像,Gumlet.com 是一項免費服務,可即時處理影像並透過 CDN 在全球範圍內提供服務。
該軟體包可透過 Packagist 取得,其供應商和軟體包標識符與此存儲庫相同。
如果使用 Composer,請在composer.json
檔案中新增:
{
"require" : {
"gumlet/php-image-resize" : " 2.0.* "
}
}
如果您仍在使用 PHP 5.3,請安裝該程式庫的1.7.0
版本;如果您使用 PHP 5.4,請安裝該程式庫的1.8.0
版本。
PHP 5.6.0
新增了 WebP 支持,目前版本的函式庫支援該功能。如果您遇到問題,請使用此程式庫的1.9.2
版本。
對於 PHP 版本 >= 7.2,應使用該程式庫的2.0.1
或更高版本。
否則:
include ' /path/to/ImageResize.php ' ;
因為此類使用命名空間,所以在實例化物件時,您需要使用完全限定的命名空間:
$ image = new Gumlet ImageResize ();
或別名:
use Gumlet ImageResize ;
$ image = new ImageResize ();
注意:此庫使用GD類,不支援調整動畫gif檔案的大小
要縮放圖像,在本例中為其大小的一半(縮放基於百分比):
$ image = new ImageResize ( ' image.jpg ' );
$ image -> scale ( 50 );
$ image -> save ( ' image2.jpg ' );
根據一維調整影像大小(保持縱橫比):
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToHeight ( 500 );
$ image -> save ( ' image2.jpg ' );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToWidth ( 300 );
$ image -> save ( ' image2.jpg ' );
若要根據給定的尺寸調整影像的大小,無論其方向為何(保持縱橫比):
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToLongSide ( 500 );
$ image -> save ( ' image2.jpg ' );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToShortSide ( 300 );
$ image -> save ( ' image2.jpg ' );
要調整影像大小以最適合給定的一組尺寸(保持寬高比):
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToBestFit ( 500 , 300 );
$ image -> save ( ' image2.jpg ' );
所有調整大小函數都有$allow_enlarge
選項,預設為 false。您可以透過將true
傳遞給任何調整大小函數來啟用:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resize ( 500 , 300 , $ allow_enlarge = True );
$ image -> save ( ' image2.jpg ' );
如果您願意自己處理寬高比,則可以直接調整大小:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resize ( 800 , 600 );
$ image -> save ( ' image2.jpg ' );
如果您不使用與來源影像相同的寬度/高度比,這將導致您的影像傾斜。
要裁剪影像:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 );
$ image -> save ( ' image2.jpg ' );
這會將圖像縮放到盡可能接近傳遞的尺寸,然後裁剪其餘部分並將其居中。
在上面的範例中,400px × 600px 的圖像將被調整為 200px × 300px,然後頂部和底部將被去除 50px,留下 200px × 200px。
裁剪模式:
很少有裁切模式選項可供您選擇如何處理縮小影像大小後最終超出的寬度或高度。使用的預設裁切模式是CROPCENTER
。因此,這些程式碼片段是等效的:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 );
$ image -> save ( ' image2.jpg ' );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 , true , ImageResize:: CROPCENTER );
$ image -> save ( ' image2.jpg ' );
如果您有 400px × 600px 的圖像,並且想要將其裁剪為 200px × 200px,則圖像的大小將調整為 200px × 300px,然後您可以指示如何處理超過傳遞裁剪值的 100px您想要使用的模式。
例如,透過裁剪模式CROPTOP
將導致底部減少 100 像素,留下 200 像素 × 200 像素。
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 , true , ImageResize:: CROPTOP );
$ image -> save ( ' image2.jpg ' );
相反,透過裁剪模式CROPBOTTOM
將導致從頂部刪除 100px,留下 200px × 200px。
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 , true , ImageResize:: CROPBOTTOM );
$ image -> save ( ' image2.jpg ' );
自由作物:
還有一種方法可以定義自訂裁剪位置。您可以在freecrop
方法中定義 $x 和 $y:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> freecrop ( 200 , 200 , $ x = 20 , $ y = 20 );
$ image -> save ( ' image2.jpg ' );
要從字串載入圖像:
$ image = ImageResize:: createFromString ( base64_decode ( ' R0lGODlhAQABAIAAAAQCBP///yH5BAEAAAEALAAAAAABAAEAAAICRAEAOw== ' ));
$ image -> scale ( 50 );
$ image -> save ( ' image.jpg ' );
您也可以將結果作為字串傳回:
$ image = ImageResize:: createFromString ( base64_decode ( ' R0lGODlhAQABAIAAAAQCBP///yH5BAEAAAEALAAAAAABAAEAAAICRAEAOw== ' ));
$ image -> scale ( 50 );
echo $ image -> getImageAsString ();
也支援魔術__toString()
:
$ image = ImageResize:: createFromString ( base64_decode ( ' R0lGODlhAQABAIAAAAQCBP///yH5BAEAAAEALAAAAAABAAEAAAICRAEAOw== ' ));
$ image -> resize ( 10 , 10 );
echo ( string ) $ image ;
如上所示,您可以呼叫$image->save('image.jpg');
要將影像直接渲染到瀏覽器中,可以呼叫$image->output()
;
當儲存到磁碟或輸出到瀏覽器時,腳本假定輸出類型與輸入相同。
如果您想以不同的影像類型儲存/輸出,您需要傳遞一個(支援的)PHP IMAGETYPE_
* 常數:
IMAGETYPE_GIF
IMAGETYPE_JPEG
IMAGETYPE_PNG
這允許您以與來源不同的類型儲存:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resize ( 800 , 600 );
$ image -> save ( ' image.png ' , IMAGETYPE_PNG );
屬性$quality_jpg
、 $quality_webp
和$quality_png
可供您配置:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> quality_jpg = 100 ;
$ image -> resize ( 800 , 600 );
$ image -> save ( ' image2.jpg ' );
預設情況下,它們分別設定為 85 和 6。有關詳細信息,請參閱imagejpeg()
和imagepng()
的手冊條目。
您也可以將品質直接傳遞給save()
、 output()
和getImageAsString()
方法:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> crop ( 200 , 200 );
$ image -> save ( ' image2.jpg ' , null , 100 );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> resizeToWidth ( 300 );
$ image -> output ( IMAGETYPE_PNG , 4 );
$ image = new ImageResize ( ' image.jpg ' );
$ image -> scale ( 50 );
$ result = $ image -> getImageAsString ( IMAGETYPE_PNG , 4 );
在上面的範例中,我們為圖像類型傳遞null
以跳過它並提供品質。在這種情況下,假設影像類型與輸入相同。
預設情況下,影像隔行掃描處於開啟狀態。可以透過將$interlace
設為0
來停用它:
$ image = new ImageResize ( ' image.jpg ' );
$ image -> scale ( 50 );
$ image -> interlace = 0 ;
$ image -> save ( ' image2.jpg ' );
執行操作時,會保留原始影像,以便您可以進行連鎖操作,而不會造成過度破壞。
這對於創建多個尺寸很有用:
$ image = new ImageResize ( ' image.jpg ' );
$ image
-> scale ( 50 )
-> save ( ' image2.jpg ' )
-> resizeToWidth ( 300 )
-> save ( ' image3.jpg ' )
-> crop ( 100 , 100 )
-> save ( ' image4.jpg ' )
;
ImageResize 因自身錯誤而拋出 ImageResizeException 。您可以捕獲它或捕獲它擴展的一般 Exception 。
這是不可預期的,但如果中途出現任何嚴重錯誤,則注意或警告 PHP GD 和圖像函數可能會顯示錯誤 (http://php.net/manual/en/ref.image.php)
try {
$ image = new ImageResize ( null );
echo " This line will not be printed " ;
} catch ( ImageResizeException $ e ) {
echo " Something went wrong " . $ e -> getMessage ();
}
您可以為新影像套用特殊效果,例如模糊或添加橫幅。
$ image = new ImageResize ( ' image.jpg ' );
// Add blure
$ image -> addFilter ( function ( $ imageDesc ) {
imagefilter ( $ imageDesc , IMG_FILTER_GAUSSIAN_BLUR );
});
// Add banner on bottom left corner
$ image18Plus = ' banner.png '
$ image -> addFilter ( function ( $ imageDesc ) use ( $ image18Plus ) {
$ logo = imagecreatefrompng ( $ image18Plus );
$ logo_width = imagesx ( $ logo );
$ logo_height = imagesy ( $ logo );
$ image_width = imagesx ( $ imageDesc );
$ image_height = imagesy ( $ imageDesc );
$ image_x = $ image_width - $ logo_width - 10 ;
$ image_y = $ image_height - $ logo_height - 10 ;
imagecopy ( $ imageDesc , $ logo , $ image_x , $ image_y , 0 , 0 , $ logo_width , $ logo_height );
});
使用給定模式翻轉影像,此方法僅適用於 PHP 5.4 版本。
$ flip = new ImageResize ( ' image.png ' );
$ image = imagecreatetruecolor ( 200 , 100 );
$ image -> addFilter ( function ( $ image ) {
imageflip ( $ image , IMG_FLIP_HORIZONTAL );
});
這兩個函數都將按照新增的順序使用。
您可以啟用預設情況下已停用的伽馬顏色校正。
$ image = new ImageResize ( ' image.png ' );
$ image -> gamma ( true );
https://gumlet.github.io/php-image-resize/index.html
該程式庫由 Gumlet.com 維護