當前位置: 首頁> 最新文章列表> imageopenpolygon() + imagecopymerge() 實現圖像合成

imageopenpolygon() + imagecopymerge() 實現圖像合成

M66 2025-05-29

在PHP中,圖像處理是一個非常實用且強大的功能。通過合理運用GD庫中的函數,比如imageopenpolygon()imagecopymerge() ,可以輕鬆實現複雜的圖像合成效果。本文將逐步介紹這兩個函數的使用方法,並通過一個簡單示例展示它們的實際應用。

一、了解imageopenpolygon()函數

imageopenpolygon()是一個用來在圖像上繪製開放式多邊形(即首尾不相連的多邊形線條)的函數。基本語法如下:

 bool imageopenpolygon ( GdImage $image , array $points , int $num_points , int $color )
  • $image :圖像資源。

  • $points :一個包含坐標點的數組,如[x1, y1, x2, y2, ...]

  • $num_points :點的數量。

  • $color :繪製線條的顏色。

注意:與imagepolygon()不同, imageopenpolygon()不會自動連接起點和終點。

二、了解imagecopymerge()函數

imagecopymerge()用來將一幅圖像部分合併到另一幅圖像上,並可以指定透明度。基本語法如下:

 bool imagecopymerge(
    GdImage $dst_image,
    GdImage $src_image,
    int $dst_x, int $dst_y,
    int $src_x, int $src_y,
    int $src_width, int $src_height,
    int $pct
)
  • $dst_image :目標圖像資源。

  • $src_image :源圖像資源。

  • $dst_x, $dst_y :目標圖像上放置源圖像的起始點坐標。

  • $src_x, $src_y :源圖像要拷貝的起始點。

  • $src_width, $src_height :拷貝的寬度和高度。

  • $pct :合併的透明度(0 = 完全透明,100 = 完全不透明)。

三、實際示例:繪製一個開放多邊形並合併到背景圖

下面是一個完整的示例,我們將使用imageopenpolygon()繪製一個簡單的圖形,並用imagecopymerge()將它合成到一張背景圖上:

 <?php
// 創建背景圖
$background = imagecreatetruecolor(400, 300);
$white = imagecolorallocate($background, 255, 255, 255);
imagefill($background, 0, 0, $white);

// 創建前景圖(多邊形圖)
$polygon = imagecreatetruecolor(200, 200);
$transparent = imagecolorallocatealpha($polygon, 0, 0, 0, 127);
imagefill($polygon, 0, 0, $transparent);
imagesavealpha($polygon, true);

// 定義多邊形的點
$points = [
    50, 50,
    150, 50,
    150, 150,
    50, 150
];

// 分配顏色
$red = imagecolorallocate($polygon, 255, 0, 0);

// 繪製開放多邊形
imageopenpolygon($polygon, $points, count($points) / 2, $red);

// 合成圖像
imagecopymerge($background, $polygon, 100, 50, 0, 0, 200, 200, 70);

// 輸出圖像到瀏覽器
header('Content-Type: image/png');
imagepng($background);

// 釋放資源
imagedestroy($background);
imagedestroy($polygon);
?>

在這個例子中,我們首先創建了一張白色背景的圖像,然後創建一張透明背景的前景圖,使用imageopenpolygon()在前景圖上繪製了一個紅色開放式方形輪廓,最後通過imagecopymerge()將這個前景圖以70%透明度合併到了背景圖上。

如果你希望將最終結果保存為文件而不是輸出到瀏覽器,只需要將imagepng($background);替換為:

 imagepng($background, '/path/to/your/folder/merged_image.png');

當然,這裡/path/to/your/folder/路徑可以換成你自己的服務器地址,比如:

 imagepng($background, 'https://m66.net/uploads/merged_image.png');

四、總結

通過imageopenpolygon()imagecopymerge()的組合使用,我們可以方便地繪製各種開放式圖形,並靈活地將它們融合到任何背景圖上,實現豐富的視覺效果。這種技術可以廣泛應用於頭像合成、水印製作、動態圖形處理等場景。