當前位置: 首頁> 最新文章列表> imagefilltoborder 和imagecopymerge 混合使用的實戰案例分析

imagefilltoborder 和imagecopymerge 混合使用的實戰案例分析

gitbox 2025-09-18
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 前置 PHP 代碼示例(與文章內容無關)</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"这是一段与文章无关的前置代碼示例"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-comment"># imagefilltoborder 和 imagecopymerge 混合使用的實戰案例分析</span></span><span>

在 PHP 的圖像處理功能中,`imagefilltoborder` 和 `imagecopymerge` 是兩個非常實用的函數。它們各自功能明確,但當兩者結合使用時,可以實現一些更加靈活和高級的圖像處理效果。本文將通過一個實戰案例,詳細分析這兩個函數的混合使用方法。

</span><span><span class="hljs-comment">## 一、函數簡介</span></span><span>

</span><span><span class="hljs-number">1</span></span><span>. **imagefilltoborder**
   - 功能:從指定點開始填充顏色,直到遇到指定邊界顏色為止。
   - 常用場景:實現區域填充、複雜形狀的背景填充等。

   ```php
   </span><span><span class="hljs-title function_ invoke__">imagefilltoborder</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-variable">$x</span></span><span>, </span><span><span class="hljs-variable">$y</span></span><span>, </span><span><span class="hljs-variable">$border_color</span></span><span>, </span><span><span class="hljs-variable">$fill_color</span></span><span>);
</span></span>

參數說明:

  • $image :目標圖像資源。

  • $x , $y :起始填充點坐標。

  • $border_color :邊界顏色,當遇到此顏色時停止填充。

  • $fill_color :填充顏色。

  1. imagecopymerge

    • 功能:將一幅圖像合併到另一幅圖像上,並可以控制透明度。

    • 常用場景:製作水印、疊加圖片等。

     <span><span><span class="hljs-title function_ invoke__">imagecopymerge</span></span><span>(</span><span><span class="hljs-variable">$dst_image</span></span><span>, </span><span><span class="hljs-variable">$src_image</span></span><span>, </span><span><span class="hljs-variable">$dst_x</span></span><span>, </span><span><span class="hljs-variable">$dst_y</span></span><span>, </span><span><span class="hljs-variable">$src_x</span></span><span>, </span><span><span class="hljs-variable">$src_y</span></span><span>, </span><span><span class="hljs-variable">$src_w</span></span><span>, </span><span><span class="hljs-variable">$src_h</span></span><span>, </span><span><span class="hljs-variable">$pct</span></span><span>);
    </span></span>

    參數說明:

    • $dst_image :目標圖像資源。

    • $src_image :源圖像資源。

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

    • $src_x , $src_y :源圖像上的起始坐標。

    • $src_w , $src_h :源圖像的寬高。

    • $pct :合併的透明度百分比。

二、實戰案例:製作漸變邊框圖

假設我們想在一張圖片上添加一個漸變色填充的邊框,並在邊框中疊加一個半透明的logo。我們可以先使用imagefilltoborder填充邊框,再用imagecopymerge添加logo。

步驟一:創建畫布和邊框

<span><span><span class="hljs-variable">$width</span></span><span> = </span><span><span class="hljs-number">400</span></span><span>;
</span><span><span class="hljs-variable">$height</span></span><span> = </span><span><span class="hljs-number">300</span></span><span>;
</span><span><span class="hljs-variable">$image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-variable">$width</span></span><span>, </span><span><span class="hljs-variable">$height</span></span><span>);

</span><span><span class="hljs-comment">// 定義顏色</span></span><span>
</span><span><span class="hljs-variable">$white</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorallocate</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>);
</span><span><span class="hljs-variable">$black</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorallocate</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>);
</span><span><span class="hljs-variable">$red</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorallocate</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>);

</span><span><span class="hljs-comment">// 填充背景為白色</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagefill</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$white</span></span><span>);

</span><span><span class="hljs-comment">// 使用 imagefilltoborder 創建紅色邊框</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagefilltoborder</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-variable">$white</span></span><span>, </span><span><span class="hljs-variable">$red</span></span><span>);
</span></span>

步驟二:加載logo 並合併

<span><span><span class="hljs-variable">$logo</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatefrompng</span></span><span>(</span><span><span class="hljs-string">'logo.png'</span></span><span>); </span><span><span class="hljs-comment">// 假設 logo 是 PNG 格式</span></span><span>
</span><span><span class="hljs-variable">$logo_width</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagesx</span></span><span>(</span><span><span class="hljs-variable">$logo</span></span><span>);
</span><span><span class="hljs-variable">$logo_height</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagesy</span></span><span>(</span><span><span class="hljs-variable">$logo</span></span><span>);

</span><span><span class="hljs-comment">// 將 logo 合併到右下角,透明度 50%</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagecopymerge</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-variable">$logo</span></span><span>, </span><span><span class="hljs-variable">$width</span></span><span> - </span><span><span class="hljs-variable">$logo_width</span></span><span> - </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-variable">$height</span></span><span> - </span><span><span class="hljs-variable">$logo_height</span></span><span> - </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$logo_width</span></span><span>, </span><span><span class="hljs-variable">$logo_height</span></span><span>, </span><span><span class="hljs-number">50</span></span><span>);
</span></span>

步驟三:輸出圖像並釋放資源

<span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: image/png'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagepng</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$logo</span></span><span>);
</span></span>

三、實戰分析

  1. 混合使用優勢

    • imagefilltoborder可快速填充任意閉合區域的背景顏色,減少手動繪製邊框的複雜度。

    • imagecopymerge可以在填充好的區域上疊加半透明元素,實現複雜圖層效果。

    • 兩者結合,可靈活處理背景和裝飾層,實現視覺美化。

  2. 注意事項

    • 邊界顏色必須正確,否則imagefilltoborder會超出預期範圍。

    • imagecopymerge的透明度值要根據背景色和前景圖調整,避免出現過暗或顏色失真。

    • PNG 圖像的透明背景處理時,需確保目標圖像支持alpha 通道,否則透明效果會丟失。

四、總結

通過本案例,可以看到imagefilltoborderimagecopymerge的組合能夠實現複雜圖像處理效果。先用imagefilltoborder填充區域,再用imagecopymerge添加裝飾或logo,可以快速創建帶邊框、帶水印或疊加效果的圖像。掌握這兩個函數的配合使用技巧,對於PHP 圖像處理開發者來說是非常實用的技能。

<hr> <?php // 尾部PHP 代碼示例(與文章內容無關) echo "這是一段與文章無關的尾部代碼示例"; ?>
 <span></span>