當前位置: 首頁> 最新文章列表> 在PHP裡怎麼用imagestringup繪製帶豎直文字的水印?實用教程來了

在PHP裡怎麼用imagestringup繪製帶豎直文字的水印?實用教程來了

gitbox 2025-06-16

在PHP裡怎麼用imagestringup繪製帶豎直文字的水印?實用教程來了

在處理圖像時,水印是一種常見的保護版權或增強品牌識別度的方法。 PHP為我們提供了許多圖像處理的功能,其中imagestringup()是一個繪製豎直文字的函數,非常適合用來為圖片添加豎直的水印。今天,我們就來講解如何在PHP中利用imagestringup()函數繪製豎直的水印。

準備工作

首先,你需要確保你的PHP環境支持GD庫,因為imagestringup()是GD庫的一部分。 GD庫是PHP中常用的圖像處理庫,通常可以在PHP安裝時選擇啟用。你可以通過以下代碼來檢查你的PHP是否啟用了GD庫:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">function_exists</span></span><span>(</span><span><span class="hljs-string">'gd_info'</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"GD library is enabled!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"GD library is not enabled!"</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

如果你的環境沒有啟用GD庫,你需要在php.ini文件中啟用它,或者使用包管理器安裝它。

基本步驟

繪製豎直水印的基本流程如下:

  1. 創建或加載目標圖像。

  2. 設置水印文字、字體、顏色等。

  3. 使用imagestringup()繪製豎直的文字。

  4. 輸出或保存處理後的圖像。

代碼示例

以下是一個完整的PHP代碼示例,演示如何使用imagestringup()為圖片添加豎直的水印文字。

 <span><span><span class="hljs-meta">&lt;?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">800</span></span><span>, </span><span><span class="hljs-number">600</span></span><span>);

</span><span><span class="hljs-comment">// 選擇背景顏色</span></span><span>
</span><span><span class="hljs-variable">$bg_color</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-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">$bg_color</span></span><span>);

</span><span><span class="hljs-comment">// 加載字體文件</span></span><span>
</span><span><span class="hljs-variable">$font</span></span><span> = </span><span><span class="hljs-string">'./path/to/your/font.ttf'</span></span><span>; </span><span><span class="hljs-comment">// 請確保字體文件路徑正確</span></span><span>

</span><span><span class="hljs-comment">// 設置水印文字內容</span></span><span>
</span><span><span class="hljs-variable">$watermark_text</span></span><span> = </span><span><span class="hljs-string">'Your Watermark'</span></span><span>;

</span><span><span class="hljs-comment">// 設置字體大小</span></span><span>
</span><span><span class="hljs-variable">$font_size</span></span><span> = </span><span><span class="hljs-number">20</span></span><span>;

</span><span><span class="hljs-comment">// 水印文字顏色(灰色)</span></span><span>
</span><span><span class="hljs-variable">$watermark_color</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">100</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">$bbox</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagettfbbox</span></span><span>(</span><span><span class="hljs-variable">$font_size</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$font</span></span><span>, </span><span><span class="hljs-variable">$watermark_text</span></span><span>);
</span><span><span class="hljs-variable">$watermark_width</span></span><span> = </span><span><span class="hljs-title function_ invoke__">abs</span></span><span>(</span><span><span class="hljs-variable">$bbox</span></span><span>[</span><span><span class="hljs-number">2</span></span><span>] - </span><span><span class="hljs-variable">$bbox</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]);
</span><span><span class="hljs-variable">$watermark_height</span></span><span> = </span><span><span class="hljs-title function_ invoke__">abs</span></span><span>(</span><span><span class="hljs-variable">$bbox</span></span><span>[</span><span><span class="hljs-number">5</span></span><span>] - </span><span><span class="hljs-variable">$bbox</span></span><span>[</span><span><span class="hljs-number">3</span></span><span>]);

</span><span><span class="hljs-comment">// 繪製豎直水印文字</span></span><span>
</span><span><span class="hljs-variable">$x</span></span><span> = </span><span><span class="hljs-number">50</span></span><span>;  </span><span><span class="hljs-comment">// 設置水印文字的X坐標</span></span><span>
</span><span><span class="hljs-variable">$y</span></span><span> = </span><span><span class="hljs-number">100</span></span><span>; </span><span><span class="hljs-comment">// 設置水印文字的Y坐標</span></span><span>

</span><span><span class="hljs-comment">// 使用imagestringup繪製豎直的文字</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagestringup</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">5</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">$watermark_text</span></span><span>, </span><span><span class="hljs-variable">$watermark_color</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">$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">?&gt;</span></span><span>
</span></span>

代碼解析

  1. 創建圖像:

  2. 加載字體:

    • 在本示例中,我們使用了TrueType字體( .ttf文件),你需要提供字體文件的路徑。字體的路徑可以是相對路徑或絕對路徑。

  3. 設置水印文字:

    • 通過imagestringup()繪製豎直文字。這個函數的參數包括圖像資源、字體大小、X和Y坐標、文字內容、以及文字的顏色。

  4. 計算水印文字的寬高:

    • 為了讓水印在圖像上對齊,我們計算了水印文字的寬度和高度。 imagettfbbox()返回一個包含邊界框的數組,計算出文字的尺寸。

  5. 繪製水印:

    • 最後,使用imagestringup()在指定的位置繪製豎直文字,文字顏色為灰色。

  6. 輸出圖像:

    • 使用imagepng()輸出圖像。此函數會將圖像以PNG格式輸出到瀏覽器。你可以根據需要輸出其他格式,如imagejpeg()imagegif()

  7. 釋放內存:

    • 使用imagedestroy()釋放圖像資源,避免內存洩漏。

注意事項

  • 字體選擇:在Windows系統中,系統自帶的字體通常是.ttf格式,而在Linux中,字體文件的路徑可能會有所不同。確保字體路徑正確,否則字體無法加載。

  • 水印位置:你可以通過調整xy的坐標,來調整水印的位置。如果需要更多控制,可以在繪製文字前計算圖像的尺寸,並動態調整水印的位置。

  • 性能優化:當圖像較大時,圖像處理會消耗較多的資源。如果需要頻繁處理大量圖像,考慮使用緩存或異步處理。

總結

imagestringup()是PHP GD庫中一個非常實用的函數,專門用於繪製豎直的文字水印。在本教程中,我們詳細介紹瞭如何創建一個豎直水印,包含了從圖像創建到輸出的完整步驟。希望你能通過這篇教程學會如何在PHP中輕鬆實現帶豎直文字的水印效果,並能夠在你的項目中靈活運用。