跳轉到內容

PHP 程式設計/影像

來自華夏公益教科書,開放的書籍,開放的世界

PHP 可以使用 GD 圖形庫(預設情況下從 PHP 3.0 開始包含)動態地建立和修改影像。

建立新影像需要幾個步驟:

  1. 載入新影像或現有影像到記憶體。
  2. 可選載入要新增的顏色。
  3. 可選修改元件(建立線條、點、填充、新增文字等)。
  4. 透過在標頭中釋出影像型別來恢復影像。
  5. 釋放記憶體。

建立新影像

[編輯 | 編輯原始碼]

要從無到有建立影像,請使用以下函式:

imagecreatetruecolor($height, $width)

該函式在記憶體中建立一個新影像,其高度和寬度以畫素定義,並返回對新影像的引用。

還有一個用於此目的的函式,但它不推薦,因為其顏色幅度較差[1]

imagecreate($height, $width)

要將磁碟上儲存的影像載入到記憶體中,請使用以下函式:

imagecreatefrom<type>($path)

示例

$img = imagecreatefrompng('image.png');

其他函式

imagecreatefromstring($text)

該函式根據引數中指定的文字格式建立影像。

如果發生錯誤,這些函式將返回 false

使用顏色

[編輯 | 編輯原始碼]

要分配顏色,必須定義 RGB 引數。

$color = imagecolorallocate($image,$r,$g,$b)

要在 PNG 中定義透明度,請使用以下函式:

imagecolortransparent($image,$color)

其中 $colorimagecolorallocate 的結果。

還可以使用以下函式確定透明度,範圍為 0 到 127(表示完全透明):

imagecolorallocatealpha($image,$r,$g,$b,$transparency)

注意:第一個分配的顏色定義了整個影像的背景。

建立和著色影像後,就可以對其應用以下操作:

  • 繪製一些畫素(例如:建立線條)。
  • 透過指定區域來修改現有畫素。

繪製形狀

[編輯 | 編輯原始碼]

要繪製畫素,我們使用其座標(以下為 x, y)

imagesetpixel(image, x, y, color)

要在兩點之間繪製一條線,請使用以下函式:

imageline(image, x1, y1, x2, y2, color)

要從對角線建立矩形,請使用以下函式:

imagerectangle(image, x1, y1, x2, y2, color)

要從中心、高度和寬度表示橢圓,請使用以下函式:

imageellipse(image, x, y, h, l, color)

或者透過在梯度(按順時針編號)中指定其弧度來表示:

imagearc(image, x, y, h, l, angle1, angle2, color)

修改現有畫素

[編輯 | 編輯原始碼]

用於修改影像(如照片)的最常用的函式無疑是 imagecopyresized,它允許複製矩形區域並將其貼上到另一個影像中[2]。示例

imagecopyresized(dst_image, src_image, dst_x, dst_y, src_x, src_y, dst_w, dst_h, src_w, src_h);

其中:

  • src_image 是源影像;
  • dst_image 是目標影像;
  • dst_x, dst_ydst_image 的座標;
  • src_x, src_ysrc_image 的座標,從左上角開始;
  • dst_w, dst_h, src_w, src_h 是源和目標矩形的寬度和高度。

因此,如果 dst_w 等於 src_w,並且 dst_h 等於 src_h,則影像矩形部分將保持相同大小。相反,我們將拉伸或放大影像。

imagecopyresampled 函式接收與 imagecopyresized 相同的引數,但在調整大小的情況下,質量得到提升。

此外,還存在 imagefilter 函式,它允許實現多種效果,例如灰度、浮雕或重新著色[3]

[編輯 | 編輯原始碼]

可以透過名為 header 的函式使用 content-type(預設情況下為 text/html)來指定獲得的影像格式(“png”、“jpeg”或“gif”)。

header("Content-type: image/<type>");

要之後視覺化影像,請根據其型別將其作為引數放在函式中:imagepngimagejpegimagegif

然後,使用 imagedestroy($image) 釋放記憶體。此步驟是可選的,但強烈建議在處理大型影像時執行。

以下程式碼在瀏覽器中顯示一個 100 畫素黑色正方形內的 50 畫素紅色正方形。

$image = imagecreatetruecolor(100, 100);
$color = imagecolorallocate($image, 255, 0, 0);
imagefilledrectangle($image,0,0,50,50,$color);
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);

參考資料

[編輯 | 編輯原始碼]


華夏公益教科書