首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 圖片與文字水印類:支援透明度、位置自訂的完整實作

     編輯:PHP 相關知識

前言

在開發 CMS 或圖片處理系統時,為圖片加上水印是常見需求。網路上雖有許多現成類別,但往往難以滿足特定專案的彈性需求。本文介紹一個自行開發的 WaterMask 類別,支援文字與圖片兩種水印模式,提供透明度、位置、字體、顏色等豐富設定,並附上完整原始碼與使用範例。

類別架構與核心屬性

WaterMask 封裝了水印生成的所有邏輯,主要屬性如下:

  • $waterType:水印類型(0=文字,1=圖片,預設 1)
  • $pos:水印位置(0=隨機,1~9 對應九宮格)
  • $transparent:透明度(0~100,預設 45)
  • $waterStr:文字水印內容
  • $fontSize、$fontColor、$fontFile:字體大小、RGB 顏色、TTF 字體檔
  • $waterImg:圖片水印檔案路徑

關鍵方法解析

建構子與圖片載入

function __construct($img) {
    $this->srcImg = file_exists($img) ? $img : die('"'.$img.'" 對不起,水印文件不存在!');
}

建構子接收目標圖片路徑,若檔案不存在則終止腳本。

圖片資訊獲取 imginfo() / waterimginfo()

根據 getimagesize() 回傳的 MIME 型別(1=GIF, 2=JPEG, 3=PNG),分別呼叫 imagecreatefromgif/jpeg/png 建立 GD 資源,不支援格式則報錯。

水印位置演算法 waterpos()

依 $pos 計算水印左上角座標 ($x, $y)。九宮格位置對應:

值位置
0隨機
1左上
2上中
3右上
4中左
5正中
6中右
7左下
8下中
9右下

圖片水印合成 waterimg()

先檢查水印尺寸不得大於原圖。利用 imagecreatetruecolor 建立暫存畫布,將原圖對應區域複製進去,再疊加水印圖片,最後用 imagecopymerge 依透明度合成回原圖。

文字水印處理 waterstr()

使用 imagettfbbox 計算文字邊界框,建立透明底圖,以 imagettftext 繪製文字,再轉呼叫 waterimg() 完成合成。

輸出與資源釋放 output()

依水印類型分派處理,最後根據原圖格式輸出(PNG/JPEG/GIF),並銷毀 GD 資源。

使用範例

$obj = new WaterMask('photo.jpg');
$obj->waterType = 1;          // 圖片水印
$obj->transparent = 45;       // 透明度
$obj->waterImg = 'logo.png';  // 水印圖片
$obj->pos = 9;                // 右下角
$obj->output();               // 直接覆蓋輸出

若需文字水印,將 waterType 設為 0,並設定 waterStr、fontSize、fontColor、fontFile 即可。

總結

此類別結構清晰、功能完整,適合直接整合至專案或作為二次開發基礎。透過封裝 GD 底層操作,開發者可專注於業務邏輯,快速實現圖片保護與品牌標識需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved