在PHP中,圖像處理一直是非常重要的功能之一,尤其在網站開發、動態生成圖像、或者圖像編輯方面。 PHP 提供了多種圖像處理函數,而imagewbmp和imagecopy是其中兩個非常實用的函數,它們常常被用來創建或編輯圖像。
imagewbmp是PHP GD 庫中用於將圖像輸出為WBMP 格式的函數。 WBMP(Wireless Bitmap)是一種低質量、低色深的圖像格式,通常用於移動設備或老式瀏覽器。 imagewbmp函數的作用是將GD 圖像資源轉換成WBMP 格式並輸出。
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">imagewbmp</span></span><span>(resource </span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$filename</span></span><span> = </span><span><span class="hljs-literal">NULL</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$threshold</span></span><span> = </span><span><span class="hljs-number">128</span></span><span>);
</span></span>$image :要輸出的圖像資源。
$filename :保存圖像的路徑。如果不提供,圖像將直接輸出到瀏覽器。
$threshold :可選參數,設置閾值來確定像素是否為黑色。默認值是128,值越小圖像越黑。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 創建一個空白圖像</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-number">100</span></span><span>, </span><span><span class="hljs-number">100</span></span><span>);
</span><span><span class="hljs-comment">// 設置背景顏色</span></span><span>
</span><span><span class="hljs-variable">$bgColor</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-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">$bgColor</span></span><span>);
</span><span><span class="hljs-comment">// 設置前景色</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-comment">// 繪製一個簡單的矩形</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagerectangle</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">90</span></span><span>, </span><span><span class="hljs-number">90</span></span><span>, </span><span><span class="hljs-variable">$black</span></span><span>);
</span><span><span class="hljs-comment">// 輸出為 WBMP 格式</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagewbmp</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);
</span><span><span class="hljs-comment">// 釋放內存</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-meta">?></span></span><span>
</span></span>imagecopy函數用於將一個圖像的部分複製到另一個圖像中。這對於在圖像上疊加內容或從一個圖像中提取區域並將其合併到另一個圖像中非常有用。
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">imagecopy</span></span><span>(resource </span><span><span class="hljs-variable">$destination</span></span><span>, resource </span><span><span class="hljs-variable">$source</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$dst_x</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$dst_y</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$src_x</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$src_y</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$src_w</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$src_h</span></span><span>);
</span></span>$destination :目標圖像資源。
$source :源圖像資源。
$dst_x 、 $dst_y :目標圖像的起始位置。
$src_x 、 $src_y :源圖像的起始位置。
$src_w 、 $src_h :源圖像的寬度和高度。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 創建一個源圖像</span></span><span>
</span><span><span class="hljs-variable">$source</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-number">100</span></span><span>, </span><span><span class="hljs-number">100</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">$source</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-title function_ invoke__">imagefill</span></span><span>(</span><span><span class="hljs-variable">$source</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">// 在源圖像上繪製一些內容</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">$source</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-title function_ invoke__">imageline</span></span><span>(</span><span><span class="hljs-variable">$source</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">90</span></span><span>, </span><span><span class="hljs-number">90</span></span><span>, </span><span><span class="hljs-variable">$black</span></span><span>);
</span><span><span class="hljs-comment">// 創建一個目標圖像</span></span><span>
</span><span><span class="hljs-variable">$destination</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-number">200</span></span><span>, </span><span><span class="hljs-number">200</span></span><span>);
</span><span><span class="hljs-variable">$bgColor</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorallocate</span></span><span>(</span><span><span class="hljs-variable">$destination</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-title function_ invoke__">imagefill</span></span><span>(</span><span><span class="hljs-variable">$destination</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">$bgColor</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagecopy</span></span><span>(</span><span><span class="hljs-variable">$destination</span></span><span>, </span><span><span class="hljs-variable">$source</span></span><span>, </span><span><span class="hljs-number">50</span></span><span>, </span><span><span class="hljs-number">50</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">100</span></span><span>, </span><span><span class="hljs-number">100</span></span><span>);
</span><span><span class="hljs-comment">// 輸出圖像到瀏覽器</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">$destination</span></span><span>);
</span><span><span class="hljs-comment">// 釋放內存</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$source</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$destination</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>在本案例中,我們將演示如何利用imagewbmp和imagecopy函數結合起來,製作一個複雜的圖像效果:將一個圖像的部分區域疊加到另一個圖像中,並輸出為WBMP 格式。假設我們有一個背景圖像,並且想要將一個圖標或其他圖像的部分區域疊加到該背景圖像上,然後輸出為低質量的WBMP 格式,以便適應移動設備。
加載背景圖像和待疊加圖像。
使用imagecopy將待疊加圖像的一部分複製到背景圖像上。
使用imagewbmp輸出最終的圖像。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 加載背景圖像</span></span><span>
</span><span><span class="hljs-variable">$background</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatefromjpeg</span></span><span>(</span><span><span class="hljs-string">'background.jpg'</span></span><span>);
</span><span><span class="hljs-comment">// 加載待疊加的圖像</span></span><span>
</span><span><span class="hljs-variable">$overlay</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatefrompng</span></span><span>(</span><span><span class="hljs-string">'overlay.png'</span></span><span>);
</span><span><span class="hljs-comment">// 獲取待疊加圖像的寬度和高度</span></span><span>
</span><span><span class="hljs-variable">$overlay_width</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagesx</span></span><span>(</span><span><span class="hljs-variable">$overlay</span></span><span>);
</span><span><span class="hljs-variable">$overlay_height</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagesy</span></span><span>(</span><span><span class="hljs-variable">$overlay</span></span><span>);
</span><span><span class="hljs-comment">// 選擇待疊加圖像的部分區域</span></span><span>
</span><span><span class="hljs-variable">$src_x</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-variable">$src_y</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-variable">$src_w</span></span><span> = </span><span><span class="hljs-variable">$overlay_width</span></span><span>;
</span><span><span class="hljs-variable">$src_h</span></span><span> = </span><span><span class="hljs-variable">$overlay_height</span></span><span>;
</span><span><span class="hljs-comment">// 在背景圖像上選擇疊加位置</span></span><span>
</span><span><span class="hljs-variable">$dst_x</span></span><span> = </span><span><span class="hljs-number">50</span></span><span>;
</span><span><span class="hljs-variable">$dst_y</span></span><span> = </span><span><span class="hljs-number">50</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">imagecopy</span></span><span>(</span><span><span class="hljs-variable">$background</span></span><span>, </span><span><span class="hljs-variable">$overlay</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-comment">// 輸出為WBMP格式</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagewbmp</span></span><span>(</span><span><span class="hljs-variable">$background</span></span><span>);
</span><span><span class="hljs-comment">// 釋放內存</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$background</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$overlay</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>imagecreatefromjpeg和imagecreatefrompng函數分別用於加載JPEG 背景圖像和PNG 格式的疊加圖像。
使用imagecopy函數將疊加圖像的一部分(從(0, 0)開始,寬度和高度為疊加圖像的大小)複製到背景圖像的(50, 50)位置。
最後,使用imagewbmp將處理後的圖像輸出為WBMP 格式,適合低帶寬或移動設備使用。
通過將imagewbmp和imagecopy函數結合使用,我們可以實現複雜的圖像疊加效果,並且將最終圖像轉換為適合移動設備或低帶寬環境的WBMP 格式。這種方法在動態生成圖像或為用戶提供個性化內容時非常有用,特別是在開發需要支持老式移動設備或特定圖像格式的應用時。
希望這個案例能夠幫助你更好地理解如何在PHP 中利用這兩個函數實現複雜的圖像效果。