一個 PHP 類,讓影像處理變得盡可能簡單。
由 Cory LaViska 開發和維護。
如果這個專案讓你再次熱愛PHP影像處理,請考慮贊助我支持它的開發。
<?php
try {
// Create a new SimpleImage object
$ image = new claviska SimpleImage ();
// Magic !
$ image
-> fromFile ( ' image.jpg ' ) // load image . jpg
-> autoOrient () // adjust orientation based on exif data
-> resize ( 320 , 200 ) // resize to 320 x200 pixels
-> flip ( ' x ' ) // flip horizontally
-> colorize ( ' DarkBlue ' ) // tint dark blue
-> border ( ' black ' , 10 ) // add a 10 pixel black border
-> overlay ( ' watermark.png ' , ' bottom right ' ) // add a watermark image
-> toFile ( ' new-image.png ' , ' image/png ' ) // convert to PNG and save a copy to new-image . png
-> toScreen (); // output to the screen
// And much more !
} catch ( Exception $ err ) {
// Handle errors
echo $ err -> getMessage ();
}
LightBlue
)、十六進位顏色或 RGB(A) 陣列傳入。使用 Composer 安裝:
composer require claviska/simpleimage
或手動包含庫:
<?php
require ' src/claviska/SimpleImage.php ' ;
SimpleImage 由 Cory LaViska 開發和維護。版權所有美麗網站有限責任公司。
如果您喜歡使用 SimpleImage,特別是在商業應用程式中,請考慮贊助我以支持其開發。
謝謝!
根據 MIT 許可證獲得許可。
精彩程度順序:
API提示:
fromFile
或fromDataUri
。$image::methodName()
或claviskaSimpleImage::methodName()
來呼叫。white
)、十六進位字串(例如'#ffffff')或RGBA陣列。normalizeColor
: white|0.25
fromDataUri($uri)
從資料 URI 載入映像。
$uri
*(字串)- 資料 URI。傳回一個 SimpleImage 物件。
fromFile($file)
從文件載入圖像。
$file
* (string) - 要載入的圖片檔案。傳回一個 SimpleImage 物件。
fromNew($width, $height, $color)
建立一個新圖像。
$width
* (int) - 影像的寬度。$height
* (int) - 影像的高度。$color
(string|array) - 新影像的可選填滿色彩(預設為「透明」)。傳回一個 SimpleImage 物件。
fromString($string)
從字串建立新圖像。
$string
* (string) - 字串形式的原始圖像資料。例子: $string = file_get_contents('image.jpg');
傳回一個 SimpleImage 物件。
toDataUri($mimeType, $options)
產生數據 URI。
$mimeType
(string) - 作為 mime 類型輸出的影像格式(預設為原始 mime 類型)。$options
(array|int) - 選項陣列或影像品質百分比(預設 100)。傳回包含資料 URI 的字串。
toDownload($filename, $mimeType, $options)
強制將映像下載到客戶端電腦。必須在任何輸出發送到螢幕之前調用。
$filename
* (string) - 傳送到客戶端的檔案名稱(不含路徑)(例如「image.jpeg」)。$mimeType
(string) - 作為 mime 類型輸出的影像格式(預設為原始 mime 類型)。$options
(array|int) - 選項陣列或影像品質百分比(預設 100)。傳回一個 SimpleImage 物件。
toFile($file, $mimeType, $options)
將圖像寫入檔案。
$mimeType
(string) - 作為 mime 類型輸出的影像格式(預設為原始 mime 類型)。$options
(array|int) - 選項陣列或影像品質百分比(預設 100)。傳回一個 SimpleImage 物件。
toScreen($mimeType, $options)
將影像輸出到螢幕。必須在任何輸出發送到螢幕之前調用。
$mimeType
(string) - 作為 mime 類型輸出的影像格式(預設為原始 mime 類型)。$options
(array|int) - 選項陣列或影像品質百分比(預設 100)。傳回一個 SimpleImage 物件。
toString($mimeType, $options)
生成圖像字串。
$mimeType
(string) - 作為 mime 類型輸出的影像格式(預設為原始 mime 類型)。$options
(array|int) - 選項陣列或影像品質百分比(預設 100)。傳回一個 SimpleImage 物件。
generate($mimeType, $options)
生成圖像。
$mimeType
(string) - 作為 mime 類型輸出的影像格式(預設為原始 mime 類型)。$options
(array|int) - 選項陣列或影像品質百分比(預設 100)。傳回一個陣列:[mimeType, data]
您也可以使用關聯數組根據目標 Mime 類型設定各種選項,而不是將品質作為最後一個函數參數提供。
$ image -> toFile ( $ file , ' image/avif ' , [
// JPG , WEBP , AVIF ( default 100 )
' quality ' => 100 ,
// AVIF ( default - 1 which is 6 )
// range of slow and small file 0 to 10 fast but big file
' speed ' => - 1 ,
]);
$ image -> toFile ( $ file , ' image/bmp ' , [
// BMP : boolean ( default true )
' compression ' => true ,
// BMP , JPG ( default null , keep the same )
' interlace ' => null ,
]);
$ image -> toFile ( $ file , ' image/gif ' , [
// GIF , PNG ( default true )
' alpha ' => true ,
]);
$ image -> toFile ( $ file , ' image/jpeg ' , [
// BMP , JPG ( default null , keep the same )
' interlace ' => null ,
// JPG , WEBP , AVIF ( default 100 )
' quality ' => 100 ,
]);
$ image -> toFile ( $ file , ' image/png ' , [
// GIF , PNG ( default true )
' alpha ' => true ,
// PNG : 0 - 10 , defaults to zlib ( default 6 )
' compression ' => - 1 ,
// PNG ( default - 1 )
' filters ' => - 1 ,
// has no effect on PNG images , since the format is lossless
// ' quality' = > 100 ,
]);
$ image -> toFile ( $ file , ' image/webp ' , [
// JPG , WEBP , AVIF ( default 100 )
' quality ' => 100 ,
]);
getAspectRatio()
取得影像的目前縱橫比。
以浮點形式返回縱橫比。
getExif()
取得影像的 exif 資料。
傳回 exif 資料數組,如果沒有可用數據,則傳回 null。
getHeight()
取得影像的目前高度。
以整數形式傳回高度。
getMimeType()
取得載入影像的 mime 類型。
傳回 mime 類型字串。
getOrientation()
取得影像的當前方向。
傳回字串:“landscape”、“portrait”或“square”
getResolution()
取得影像的目前解析度(以 DPI 為單位)。
傳回整數數組:[0 => 96, 1 => 96]
getWidth()
取得影像的目前寬度。
以整數形式傳回寬度。
hasImage()
檢查 SimpleImage 物件是否已載入映像。
傳回一個布林值。
reset()
破壞影像資源。
傳回一個 SimpleImage 物件。
autoOrient()
旋轉影像,以便根據其 exif 資料使方向正確。在沒有 exif 資料的映像上呼叫此方法是安全的(不會進行任何更改)。傳回一個 SimpleImage 物件。
bestFit($maxWidth, $maxHeight)
按比例調整影像大小以適合特定的寬度和高度。
$maxWidth
* (int) - 影像的最大寬度。$maxHeight
* (int) - 影像的最大高度。傳回一個 SimpleImage 物件。
crop($x1, $y1, $x2, $y2)
裁剪影像。
傳回一個 SimpleImage 物件。
fitToHeight($height)
(已棄用)按比例將影像大小調整到特定高度。
此方法在 3.2.2 版本中已棄用,並將在 4.0 版本中刪除。請改用resize(null, $height)
。
$height
* (int) - 調整圖片大小的高度。傳回一個 SimpleImage 物件。
fitToWidth($width)
(已棄用)按比例將影像大小調整為特定寬度。
此方法在 3.2.2 版本中已棄用,並將在 4.0 版本中刪除。請使用resize($width, null)
代替。
$width
* (int) - 調整圖片大小的寬度。傳回一個 SimpleImage 物件。
flip($direction)
水平或垂直翻轉影像。
$direction
* (string) - 翻轉方向:x|y|both傳回一個 SimpleImage 物件。
maxColors($max, $dither)
將影像減少到最大顏色數。
$max
* (int) - 要使用的最大顏色數。$dither
(bool) - 是否使用抖動效果(預設為 true)。傳回一個 SimpleImage 物件。
overlay($overlay, $anchor, $opacity, $xOffset, $yOffset)
將影像放置在目前影像之上。
$overlay
* (string|SimpleImage) - 要疊加的映像。這可以是檔案名稱、資料 URI 或 SimpleImage 物件。$anchor
(string) - 錨點: 'center', 'top', 'bottom', 'left', 'right', 'top left', 'top right', 'bottom left', 'bottom right' (默認「中心」)$opacity
(float) - 覆蓋層的不透明度等級 0-1(預設 1)。$xOffset
(int) - 以像素為單位的水平偏移(預設為 0)。$yOffset
(int) - 以像素為單位的垂直偏移(預設為 0)。$calculateOffsetFromEdge
(bool) - 計算參考影像邊緣的偏移。 $xOffset 和 $yOffset 對中心錨點沒有影響。 (預設為 false)。傳回一個 SimpleImage 物件。
resize($width, $height)
將影像大小調整為指定尺寸。如果僅指定一維,則影像將按比例調整大小。
$width
* (int) - 新圖像寬度。$height
* (int) - 新圖片高度。傳回一個 SimpleImage 物件。
resolution($res_x, $res_y)
變更影像的解析度 (DPI)。
$res_x
* (int) - 水平分辨率,以 DPI 為單位。$res_y
(int) - 垂直分辨率,以 DPI 為單位。傳回一個 SimpleImage 物件。
rotate($angle, $backgroundColor)
旋轉影像。
$angle
* (int) - 旋轉角度 (-360 - 360)。$backgroundColor
(string|array) - 旋轉後未覆蓋區域使用的背景顏色(預設為「透明」)。傳回一個 SimpleImage 物件。
text($text, $options, &$boundary)
向圖像添加文字。
$text*
(字串) - 所需的文字。$options
(array) - 選項陣列。fontFile
* (字串) - 要使用的 TrueType(或相容)字型檔案。size
(int) - 字體大小(以像素為單位)(預設為 12)。color
(string|array) - 文字顏色(預設為黑色)。anchor
(字串) - 錨點:'center','top','bottom','left','right','top left','top right','bottom left','bottom right'(默認'中心')。xOffset
(int) - 以像素為單位的水平偏移(預設為 0)。yOffset
(int) - 以像素為單位的垂直偏移(預設為 0)。shadow
(陣列)- 文字陰影參數。x
* (int) - 以像素為單位的水平偏移。y
* (int) - 以像素為單位的垂直偏移。color
* (string|array) - 文字陰影顏色。calculateOffsetFromEdge
(bool) - 計算參考影像邊緣的偏移量(預設為 false)。baselineAlign
(bool) - 將文字字體與基線對齊。 (預設為真)。$boundary
(array) - 如果傳遞,此變數將包含一個包含文字周圍座標的陣列:[x1, y1, x2, y2, width, height]。這可用於計算文字新增到圖像後的位置。傳回一個 SimpleImage 物件。
thumbnail($width, $height, $anchor)
建立縮圖。此函數嘗試使影像盡可能接近提供的尺寸,然後裁剪剩餘的溢出以強制達到所需的尺寸。對於產生縮圖很有用。
$width
* (int) - 縮圖寬度。$height
* (int) - 縮圖高度。$anchor
(string) - 錨點: 'center', 'top', 'bottom', 'left', 'right', 'top left', 'top right', 'bottom left', 'bottom right' (默認“中心”)。傳回一個 SimpleImage 物件。
arc($x, $y, $width, $height, $start, $end, $color, $thickness)
繪製弧線。
$x
* (int) - 圓弧中心的 x 座標。$y
* (int) - 圓弧中心的 y 座標。$width
* (int) - 弧線的寬度。$height
* (int) - 弧的高度。$start
* (int) - 弧線的起點(以度為單位)。$end
* (int) - 弧線終點(以度為單位)。$color
* (string|array) - 弧線顏色。$thickness
(int|string) - 以像素為單位的線條粗細或「填滿」(預設為 1)。傳回一個 SimpleImage 物件。
border($color, $thickness)
在影像周圍繪製邊框。
$color
* (string|array) - 邊框顏色。$thickness
(int) - 邊框的厚度(預設為 1)。傳回一個 SimpleImage 物件。
dot($x, $y, $color)
繪製單一像素點。
$x
* (int) - 點的 x 座標。$y
* (int) - 點的 y 座標。$color
* (string|array) - 點顏色。傳回一個 SimpleImage 物件。
ellipse($x, $y, $width, $height, $color, $thickness)
繪製一個橢圓。
$x
* (int) - 中心的 x 座標。$y
* (int) - 中心的 y 座標。$width
* (int) - 橢圓寬度。$height
* (int) - 橢圓高度。$color
* (string|array) - 橢圓顏色。$thickness
(int|string) - 以像素為單位的線條粗細或「填滿」(預設為 1)。傳回一個 SimpleImage 物件。
fill($color)
用純色填滿影像。
$color
(string|array) - 填滿顏色。傳回一個 SimpleImage 物件。
line($x1, $y1, $x2, $y2, $color, $thickness)
畫一條線。
$x1
* (int) - 第一點的 x 座標。$y1
* (int) - 第一點的 y 座標。$x2
* (int) - 第二個點的 x 座標。$y2
* (int) - 第二個點的 y 座標。$color
(string|array) - 線條顏色。$thickness
(int) - 線條粗細(預設為 1)。傳回一個 SimpleImage 物件。
polygon($vertices, $color, $thickness)
繪製一個多邊形。
$vertices
* (array) - x/y 陣列中的多邊形頂點。例子: [
['x' => x1, 'y' => y1],
['x' => x2, 'y' => y2],
['x' => xN, 'y' => yN]
]
$color
* (string|array) - 多邊形顏色。$thickness
(int|string) - 以像素為單位的線條粗細或「填滿」(預設為 1)。傳回一個 SimpleImage 物件。
rectangle($x1, $y1, $x2, $y2, $color, $thickness)
繪製一個矩形。
$x1
* (int) - 左上角的 x 座標。$y1
* (int) - 左上角 y 座標。$x2
* (int) - 右下角 x 座標。$y2
* (int) - 右下角 y 座標。$color
* (string|array) - 矩形顏色。$thickness
(int|string) - 以像素為單位的線條粗細或「填滿」(預設為 1)。傳回一個 SimpleImage 物件。
roundedRectangle($x1, $y1, $x2, $y2, $radius, $color, $thickness)
繪製一個圓角矩形。
$x1
* (int) - 左上角的 x 座標。$y1
* (int) - 左上角 y 座標。$x2
* (int) - 右下角 x 座標。$y2
* (int) - 右下角 y 座標。$radius
* (int) - 邊框半徑(以像素為單位)。$color
* (string|array) - 矩形顏色。$thickness
(int|string) - 以像素為單位的線條粗細或「填滿」(預設為 1)。傳回一個 SimpleImage 物件。
blur($type, $passes)
應用模糊濾鏡。
$type
(string) - 要使用的模糊演算法:'selective'、'gaussian' (預設為 'gaussian')。$passes
(int) - 套用濾鏡的次數,增強效果(預設為 1)。傳回一個 SimpleImage 物件。
brighten($percentage)
應用亮度濾鏡可將影像變亮。
$percentage
* (int) - 使影像變亮的百分比 (0 - 100)。傳回一個 SimpleImage 物件。
colorize($color)
應用著色濾鏡。
$color
* (string|array) - 過濾器顏色。傳回一個 SimpleImage 物件。
contrast($percentage)
應用對比濾鏡。
$percentage
* (int) - 要調整的百分比 (-100 - 100)。傳回一個 SimpleImage 物件。
darken($percentage)
套用亮度濾鏡使影像變暗。
$percentage
* (int) - 使影像變暗的百分比 (0 - 100)。傳回一個 SimpleImage 物件。
desaturate()
應用去飽和(灰階)濾鏡。
傳回一個 SimpleImage 物件。
duotone($lightColor, $darkColor)
將雙色調濾鏡應用於影像。
$lightColor
* (string|array) - 雙色調中最淺的顏色。$darkColor
* (string|array) - 雙色調中最暗的顏色。傳回一個 SimpleImage 物件。
edgeDetect()
應用邊緣檢測過濾器。
傳回一個 SimpleImage 物件。
emboss()
塗上浮雕濾鏡。
傳回一個 SimpleImage 物件。
invert()
反轉影像的顏色。
傳回一個 SimpleImage 物件。
opacity()
更改影像的不透明度等級。
$opacity
* (float) - 所需的不透明度等級 (0 - 1)。傳回一個 SimpleImage 物件。
pixelate($size)
應用像素化濾鏡。
$size
(int) - 區塊的大小(以像素為單位)(預設為 10)。傳回一個 SimpleImage 物件。
sepia()
透過降低影像的飽和度並應用棕褐色調來模擬棕褐色效果。
傳回一個 SimpleImage 物件。
sharpen($amount)
銳化影像。
$amount
(int) - 銳化量(1 - 100,預設 50)傳回一個 SimpleImage 物件。
sketch()
套用均值移除濾鏡以產生草圖效果。
傳回一個 SimpleImage 物件。
(static) adjustColor($color, $red, $green, $blue, $alpha)
透過獨立增加/減少紅/綠/藍/alpha 值來調整顏色。
$color
* (string|array) - 要調整的顏色。$red
* (int) - 紅色調整 (-255 - 255)。$green
* (int) - 綠色調整 (-255 - 255)。$blue
* (int) - 藍色調整 (-255 - 255)。$alpha
* (float) - Alpha 調整 (-1 - 1)。傳回 RGBA 顏色數組。
(static) darkenColor($color, $amount)
使顏色變暗。
$color
* (string|array) - 要變暗的顏色。$amount
* (int) - 變暗的量 (0 - 255)。傳回 RGBA 顏色數組。
extractColors($count = 10, $backgroundColor = null)
像人類一樣從影像中提取顏色。如果您使用 Composer,它將自動為您安裝。
$count
(int) - 要提取的最大顏色數(預設為 5)。$backgroundColor
(string|array) - 預設情況下,任何 alpha 值大於零的像素都會被丟棄。這是因為透明顏色不會如實被感知。例如,完全透明的黑色在白色背景上看起來是白色的。因此,如果您想考慮透明度,則必須指定預設背景顏色。傳回 RGBA 顏色數組的陣列。
getColorAt($x, $y)
取得單一像素的RGBA值。
$x
* (int) - 像素的水平位置。$y
* (int) - 像素的垂直位置。傳回 RGBA 顏色數組,如果 x/y 位置超出畫布,則傳回 false。
(static) lightenColor($color, $amount)
淡化顏色。
$color
* (string|array) - 要變亮的顏色。$amount
* (int) - 變暗的量 (0 - 255)。傳回 RGBA 顏色數組。
(static) normalizeColor($color)
將十六進位或陣列顏色值標準化為格式正確的 RGBA 陣列。
$color
* (string|array) - CSS 顏色名稱、十六進位字串或陣列 [red、green、blue、alpha]。您可以透過十六進位字串和顏色名稱來傳遞 alpha 透明度。例如:
#fff|0.50 <-- 50% 白紅|0.25 <-- 25% 紅
傳回一個陣列:[紅、綠、藍、alpha]
當出現問題時,SimpleImage 會拋出標準異常。您應該始終在程式碼周圍使用 try/catch 區塊來正確處理它們。
<?php
try {
$ image = new claviska SimpleImage( ' image.jpeg ' )
// ...
} catch ( Exception $ err ) {
echo $ err -> getMessage ();
}
若要檢查特定錯誤,請將$err->getCode()
與定義的錯誤常數進行比較。
<?php
try {
$ image = new claviska SimpleImage( ' image.jpeg ' )
// ...
} catch ( Exception $ err ) {
if ( $ err -> getCode () === $ image :: ERR_FILE_NOT_FOUND ) {
echo ' File not found! ' ;
} else {
echo $ err -> getMessage ();
}
}
作為最佳實踐,請始終使用定義的常數而不是它們的整數值。這些值可能會在未來版本中發生變化,並且不會被視為重大更改。
ERR_FILE_NOT_FOUND
- 由於某種原因無法找到或載入指定的檔案。ERR_FONT_FILE
- 無法載入指定的字型檔。ERR_FREETYPE_NOT_ENABLED
- 您的 PHP 版本未啟用 Freetype 支援。ERR_GD_NOT_ENABLED
- 您的 PHP 版本未啟用 GD 擴充功能。ERR_LIB_NOT_LOADED
- 尚未載入所需的函式庫。ERR_INVALID_COLOR
- 作為參數傳遞了無效的顏色值。ERR_INVALID_DATA_URI
- 指定的資料 URI 無效。ERR_INVALID_IMAGE
- 指定的映像無效。ERR_UNSUPPORTED_FORMAT
- 指定的影像格式無效。ERR_WEBP_NOT_ENABLED
- 您的 PHP 版本未啟用 WEBP 支援。ERR_WRITE
- 無法寫入檔案系統。ERR_INVALID_FLAG
- 指定的標誌鍵不存在。顏色參數可以是 CSS 顏色名稱(例如LightBlue
)、十六進位顏色字串(例如#0099dd
)或 RGB(A) 陣列(例如['red' => 255, 'green' => 0, 'blue' => 0, 'alpha' => 1]
)。
當$thickness
> 1 時,GD 從中心原點繪製所需粗細的線。例如,在 [10, 10, 20, 20] 處繪製的厚度為 3 的矩形實際上將在 [9, 9, 21, 21] 處繪製。這對於所有形狀都是如此,並且不是 SimpleImage 庫中的錯誤。
透過使用setFlag($key, $value)
方法設定實例標誌值來調整 SimpleImage 實例的行為。
$ image = new claviska SimpleImage ( ' image.jpeg ' )-> setFlag ( " foo " , " bar " );
您也可以將關聯數組傳遞給 SimpleImage 建構函數來設定實例標誌。
$ image = new claviska SimpleImage ( ' image.jpeg ' , [ ' foo ' => ' bar ' ]);
// . . or without an $ image
$ image = new claviska SimpleImage (flags: [ ' foo ' => ' bar ' ]);
注意:如果鍵不存在(無預設值) setFlag()
會拋出ERR_INVALID_FLAG
異常。
sslVerify
將sslVerify
設為false
(預設為true
)將使所有透過 HTTPS 載入的映像放棄憑證對等驗證。這對於自簽名憑證特別有用。
$ image = new claviska SimpleImage ( ' https://localhost/image.jpeg ' , [ ' sslVerify ' => false ]);
// Would normally throw an OpenSSL exception , but is ignored with the sslVerify flag set to false .
text
方法添加了文字陰影。fromString()
方法以從字串載入圖片。toString()
方法來產生圖像字串。arc
方法。border
方法。dot
方法。ellipse
方法。line
方法。polygon
方法。rectangle
方法。roundedRectangle
方法。adjustColor
方法,用於修改 RGBA 顏色通道以建立相對顏色變化。darkenColor
方法來使顏色變暗。extractColors
方法以從圖像中獲取最常見的顏色。getColorAt
方法來取得特定像素的 RGBA 值。lightenColor
方法來淡化顏色。toDownload
方法以強制將映像下載到客戶端電腦。duotone
濾鏡來創建雙色調影像。sharpen
方法來銳化影像。abeautifulsite
改為claviska
。create
方法變更為fromNew
。load
方法變更為fromFile
。load_base64
方法改為fromDataUri
。output
方法更改為toScreen
.xoutput_base64
方法改為toDataUri
。save
方法變更為toFile
。text
方法以接受選項數組而不是大量參數。text
方法中刪除了文字筆劃,因為它會產生髒結果並且不支援透明度。smooth
方法,因為 PHP 手冊中的參數沒有得到很好的記錄。adaptive_resize
(改用thumbnail
)。get_meta_data
(使用getExif
、 getHeight
、 getMime
、 getOrientation
和getWidth
代替)。