<span><span><span class="hljs-meta"><?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">?></span></span><span>
<hr>
</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 :填充顏色。
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><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>混合使用優勢
imagefilltoborder可快速填充任意閉合區域的背景顏色,減少手動繪製邊框的複雜度。
imagecopymerge可以在填充好的區域上疊加半透明元素,實現複雜圖層效果。
兩者結合,可靈活處理背景和裝飾層,實現視覺美化。
注意事項
邊界顏色必須正確,否則imagefilltoborder會超出預期範圍。
imagecopymerge的透明度值要根據背景色和前景圖調整,避免出現過暗或顏色失真。
PNG 圖像的透明背景處理時,需確保目標圖像支持alpha 通道,否則透明效果會丟失。
通過本案例,可以看到imagefilltoborder與imagecopymerge的組合能夠實現複雜圖像處理效果。先用imagefilltoborder填充區域,再用imagecopymerge添加裝飾或logo,可以快速創建帶邊框、帶水印或疊加效果的圖像。掌握這兩個函數的配合使用技巧,對於PHP 圖像處理開發者來說是非常實用的技能。
<hr> <?php // 尾部PHP 代碼示例(與文章內容無關) echo "這是一段與文章無關的尾部代碼示例"; ?> <span></span>