1. 启用 Options Framework
确保你使用的是支持 Options Framework 的 WordPress 主题,或者手动集成该框架。
如果你已经在使用 Options Framework(比如主题自带 admin/options.php),直接跳过。
2. 添加设置项到 Options Framework
在主题目录的 /admin/options.php 文件中,添加如下字段配置:
$settings[] = array(
'name' => '图片水印设置',
'type' => 'heading'
);
$settings[] = array(
'name' => '启用图片水印',
'id' => 'enable_image_watermark',
'type' => 'checkbox',
);
$settings[] = array(
'name' => '水印图片',
'id' => 'custom_watermark_image',
'type' => 'upload'
);
$settings[] = array(
'name' => '水印位置',
'id' => 'watermark_position',
'type' => 'select',
'options' => array(
'top-left' => '左上角',
'top-center' => '上居中',
'top-right' => '右上角',
'middle-left' => '左中',
'center' => '正中心',
'middle-right' => '右中',
'bottom-left' => '左下角',
'bottom-center' => '下居中',
'bottom-right' => '右下角'
),
'std' => 'bottom-right'
);
后台将自动生成配置界面,允许用户控制水印功能。
3. 编写水印处理逻辑(放入 functions.php)
add_filter('wp_handle_upload', 'add_watermark_from_optionsframework');
function add_watermark_from_optionsframework($upload) {
if (!of_get_option('enable_image_watermark')) return $upload;
$image_path = $upload['file'];
$image_type = mime_content_type($image_path);
if (!in_array($image_type, ['image/jpeg', 'image/png'])) return $upload;
$image = $image_type === 'image/jpeg'
? imagecreatefromjpeg($image_path)
: imagecreatefrompng($image_path);
if (!$image) return $upload;
$watermark_url = of_get_option('custom_watermark_image');
if (!$watermark_url) return $upload;
$tmp = download_url($watermark_url);
if (is_wp_error($tmp)) return $upload;
$original_wm = imagecreatefrompng($tmp);
imagealphablending($original_wm, true);
imagesavealpha($original_wm, true);
$img_w = imagesx($image);
$img_h = imagesy($image);
$target_wm_w = intval($img_w * 0.15);
$scale = $target_wm_w / imagesx($original_wm);
$target_wm_h = intval(imagesy($original_wm) * $scale);
$watermark = imagecreatetruecolor($target_wm_w, $target_wm_h);
imagealphablending($watermark, false);
imagesavealpha($watermark, true);
$transparent = imagecolorallocatealpha($watermark, 0, 0, 0, 127);
imagefill($watermark, 0, 0, $transparent);
imagecopyresampled(
$watermark,
$original_wm,
0, 0, 0, 0,
$target_wm_w,
$target_wm_h,
imagesx($original_wm),
imagesy($original_wm)
);
$position = of_get_option('watermark_position', 'bottom-right');
$margin = 10;
$positions = [
'top-left' => [$margin, $margin],
'top-center' => [($img_w - $target_wm_w) / 2, $margin],
'top-right' => [$img_w - $target_wm_w - $margin, $margin],
'middle-left' => [$margin, ($img_h - $target_wm_h) / 2],
'center' => [($img_w - $target_wm_w) / 2, ($img_h - $target_wm_h) / 2],
'middle-right' => [$img_w - $target_wm_w - $margin, ($img_h - $target_wm_h) / 2],
'bottom-left' => [$margin, $img_h - $target_wm_h - $margin],
'bottom-center' => [($img_w - $target_wm_w) / 2, $img_h - $target_wm_h - $margin],
'bottom-right' => [$img_w - $target_wm_w - $margin, $img_h - $target_wm_h - $margin],
];
[$x, $y] = $positions[$position] ?? $positions['bottom-right'];
imagecopy($image, $watermark, $x, $y, 0, 0, $target_wm_w, $target_wm_h);
if ($image_type === 'image/jpeg') {
imagejpeg($image, $image_path, 90);
} else {
imagepng($image, $image_path);
}
imagedestroy($image);
imagedestroy($watermark);
imagedestroy($original_wm);
@unlink($tmp);
return $upload;
}
4. 使用方法
进入 WordPress 后台 → 主题设置
上传你想要作为水印的 PNG 图(建议带透明背景)
启用水印功能
选择水印显示位置
上传任意图片,自动加水印!
5. 总结
这一功能完全基于代码实现,不依赖任何第三方插件,灵活、安全、高效。你可以轻松为所有上传图片添加品牌标识,也可以根据需求扩展更多逻辑(如只对某些尺寸图片加水印、仅管理员用户触发水印等)。
评论前必须登录!
注册