以前用 WordPress 幫朋友搭建了一個展示公司產品的網站, 發現產品圖片時常被同行盜用。 於是搗鼓著搞個為圖片加水印的功能, 找來一款 WordPress 圖片水印外掛: Watermark Reloaded, 並且對外掛做了一些修改, 讓它支援半透明水印。
外掛功能
看看 WordPress 後臺截了個圖, 功能一目瞭然。
1. 支援對指定型別的圖片進行加水印操作
2. 支援水印定位和位置微調
3. 支援自定義水印文字, 修改文字型別, 文字尺寸和文字顏色

設定完成後,當使用者使用 WordPress 的新增附件功能上傳圖片,即在指定格式的圖片上進行水印處理。也就是說, 這個外掛在上傳圖片後, 在傳送到指定目錄之前為圖片加上水印。
半透明水印
在多款 WordPress 圖片水印外掛中,Watermark Reloaded 並不算功能強大,但是它使用起來十分便利。除了半透明水印效果, 它可以滿足我其他最想要的功能,所以我決定改造一下,讓它水印支援透明度調整。很簡單的,跟我來試一下。
開啟外掛的主檔案 watermark-reloaded.php, 並找到 imageAddText 方法。 將該方法修改如下:
private function imageAddText($image, array $opt) {
// calculate watermark position and get full path to font file
$offset = $this->calculateOffset($image, $opt);
$opt = $this->getFontFullpath($opt);
// allocate text color
$color = $opt['watermark_text']['color'];
// 這是不透明度, 介於 0.0 和 1.0 之間, 可以參考 CSS3 關於 opacity 的說明.
$opacity = 0.65;
// Add the text to image
$red = hexdec(substr($color, 0, 2));
$green = hexdec(substr($color, 2, 2));
$blue = hexdec(substr($color, 4, 2));
$alpha = (1 - $opacity) * 127;
$style = imagecolorallocatealpha($image, $red, $green, $blue, $alpha);
imagettftext($image, $opt['watermark_text']['size'], 0, $offset['x'], $offset['y'], $style, $opt['watermark_text']['font'], $opt['watermark_text']['value']);
return $image;
}
如果你實在懶得不想動手, 或者就是搞不來。.. 沒關係, 我基於 Watermark Reloaded 1.2.4 修改了一份。 可以透過下方連結下載。
Watermark Reloaded 1.2.4 半透明水印版

注意: 因為圖片通道問題, GIF 圖片上的半透明水印會顯示成紅色。
外掛不足
如前面所說, Watermark Reloaded 功能不強大, 不能完全滿足我們的需求, 比如: 支援圖片 (PNG) 水印, 文字陰影等等。 最要命的是無法根據圖片大小進行自適應的水印處理。
舉個例子吧, 我正在上傳一個 600x600 的圖片, WordPress 會為我生成 150x150 的縮圖, 但我只能定義一個大小的水印 (因為只能定義一個文字型別, 字號和尺寸) 。 當我設定文字尺寸為 72px 的時候, 可能 600x600 顯示的效果剛剛好, 但是 150x150 的圖片還沒有水印大, 被水印完全擋住。
相關外掛
我用 Google 找到的第一個 WordPress 圖片水印外掛是 Marekkis Watermark. 從功能介紹看這個外掛很強大, 支援佈局, 修改字型, 圖片水印, 透明度等等。 看似十分完美, 但很遺憾, 我在 WordPress 3.2.1 中啟用外掛導致頁面佈局異常, 所以放棄了。.. 追求某些水印功能的朋友可以一試。
後話
我的部落格沒有使用 WordPress 的相簿功能, 也不考慮要給圖片打水印。 所以關於外掛的不足, 寫個新給外掛作者建議一下好了, 在此打住不折騰。