以前用 WordPress 幫朋友搭建了一個展示公司產品的網站, 發現產品圖片時常被同行盜用。 於是搗鼓着搞個為圖片加水印的功能, 找來一款 WordPress 圖片水印插件: Watermark Reloaded, 並且對插件做了一些修改, 讓它支持半透明水印。

插件功能

看看 WordPress 後台截了個圖, 功能一目瞭然。

1. 支持對指定類型的圖片進行加水印操作

2. 支持水印定位和位置微調

3. 支持自定義水印文本, 修改文字類型, 文字尺寸和文字顏色

WordPress 圖片水印插件 - Watermark Reloaded

設置完成後,當用户使用 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 半透明水印版

Watermark Reloaded 支持半透明水印

注意: 因為圖片通道問題, GIF 圖片上的半透明水印會顯示成紅色。

插件不足

如前面所説, Watermark Reloaded 功能不強大, 不能完全滿足我們的需求, 比如: 支持圖片 (PNG) 水印, 文字陰影等等。 最要命的是無法根據圖片大小進行自適應的水印處理。

舉個例子吧, 我正在上傳一個 600x600 的圖片, WordPress 會為我生成 150x150 的縮略圖, 但我只能定義一個大小的水印 (因為只能定義一個文字類型, 字號和尺寸) 。 當我設定文字尺寸為 72px 的時候, 可能 600x600 顯示的效果剛剛好, 但是 150x150 的圖片還沒有水印大, 被水印完全擋住。

相關插件

我用 Google 找到的第一個 WordPress 圖片水印插件是 Marekkis Watermark. 從功能介紹看這個插件很強大, 支持佈局, 修改字體, 圖片水印, 透明度等等。 看似十分完美, 但很遺憾, 我在 WordPress 3.2.1 中激活插件導致頁面佈局異常, 所以放棄了。.. 追求某些水印功能的朋友可以一試。

後話

我的博客沒有使用 WordPress 的圖庫功能, 也不考慮要給圖片打水印。 所以關於插件的不足, 寫個新給插件作者建議一下好了, 在此打住不折騰。