前面写了一篇给图片加上水印的文章,《如何通过代码实现WordPress自动给上传的图片添加水印》,有些小伙伴可能看不太明白,所以重新整理了一下。

这片文章只讲如何使用代码来实现这个功能

1、图片水印

将以下代码添加到主题的 functions.php 文件中,建议在文件的末尾添加。

// 添加水印
add_action( 'add_attachment', 'add_watermark_to_image' );
function add_watermark_to_image( $attachment_id ) {
    $image_path = get_attached_file( $attachment_id );
    $watermark_path = '/path/to/watermark.png'; // 水印图片路径

    // 如果是 PNG 图片,使用 imagecreatefrompng() 函数创建图片
    if ( 'image/png' == get_post_mime_type( $attachment_id ) ) {
        $image = imagecreatefrompng( $image_path );
    }
    // 如果是 JPG 或 JPEG 图片,使用 imagecreatefromjpeg() 函数创建图片
    else if ( 'image/jpeg' == get_post_mime_type( $attachment_id ) || 'image/jpg' == get_post_mime_type( $attachment_id ) ) {
        $image = imagecreatefromjpeg( $image_path );
    }
    // 如果是 GIF 图片,使用 imagecreatefromgif() 函数创建图片
    else if ( 'image/gif' == get_post_mime_type( $attachment_id ) ) {
        $image = imagecreatefromgif( $image_path );
    }

    if ( $image && file_exists( $watermark_path ) ) {
        $watermark = imagecreatefrompng( $watermark_path );

        // 获取水印和原图片的宽度和高度
        $watermark_width = imagesx( $watermark );
        $watermark_height = imagesy( $watermark );
        $image_width = imagesx( $image );
        $image_height = imagesy( $image );

        // 水印放置在右下角
        $pos_x = $image_width - $watermark_width - 10;
        $pos_y = $image_height - $watermark_height - 10;

        // 将水印添加到原图片中
        imagecopy( $image, $watermark, $pos_x, $pos_y, 0, 0, $watermark_width, $watermark_height );

        // 将添加水印后的图片保存到原来的路径
        if ( 'image/png' == get_post_mime_type( $attachment_id ) ) {
            imagepng( $image, $image_path );
        }
        else if ( 'image/jpeg' == get_post_mime_type( $attachment_id ) || 'image/jpg' == get_post_mime_type( $

这段代码需要根据具体情况进行一些修改,主要包括以下几个位置:

  1. $watermark_image_path:水印图片的路径,需要将其修改为你自己水印图片的路径,例如:/path/to/watermark.png
  2. $watermark_transparency:水印图片的透明度,建议设置为 50。
  3. $watermark_position:水印图片的位置,建议设置为 BR,即右下角。
  4. $image_sizes:需要添加水印的图片尺寸,如果你想要添加水印的图片尺寸不是 thumbnailmediumlarge,则需要在这个数组中添加相应的尺寸。

2、文字水印

下面这个是添加文字水印的代码:

要添加文字水印,可以使用 imagefttext 函数,它可以将文字绘制到图片上

// 定义水印文字
$watermark_text = 'My Watermark';

// 定义水印文字颜色和透明度
$watermark_color = array(0, 0, 0); // RGB 颜色值
$watermark_transparency = 50; // 透明度(0-100)

// 获取上传的图片路径
$image_path = get_attached_file($attachment_id);

// 获取图片的类型
$image_type = exif_imagetype($image_path);

// 根据图片类型创建对应的图像资源
switch ($image_type) {
    case IMAGETYPE_JPEG:
        $image = imagecreatefromjpeg($image_path);
        break;
    case IMAGETYPE_PNG:
        $image = imagecreatefrompng($image_path);
        break;
    case IMAGETYPE_GIF:
        $image = imagecreatefromgif($image_path);
        break;
    default:
        return;
}

// 设置水印文字的字体大小
$font_size = 20;

// 计算水印文字的宽度和高度
$bbox = imagettfbbox($font_size, 0, 'arial.ttf', $watermark_text);
$watermark_width = $bbox[2] - $bbox[0];
$watermark_height = $bbox[3] - $bbox[5];

// 计算水印文字的位置
$image_width = imagesx($image);
$image_height = imagesy($image);
$watermark_x = $image_width - $watermark_width - 10; // 10 是水印距离图片边缘的距离
$watermark_y = $image_height - $watermark_height - 10; // 10 是水印距离图片边缘的距离

// 设置水印文字的颜色和透明度
$watermark_color = imagecolorallocatealpha($image, $watermark_color[0], $watermark_color[1], $watermark_color[2], $watermark_transparency);

// 添加水印文字
imagettftext($image, $font_size, 0, $watermark_x, $watermark_y, $watermark_color, 'arial.ttf', $watermark_text);

// 保存添加水印后的图片
switch ($image_type) {
    case IMAGETYPE_JPEG:
        imagejpeg($image, $image_path);
        break;
    case IMAGETYPE_PNG:
        imagepng($image, $image_path);
        break;
    case IMAGETYPE_GIF:
        imagegif($image, $image_path);
        break;
}

// 释放图像资源
imagedestroy($image);

这段代码需要将字体文件 arial.ttf 放在主题目录下,或者使用 get_template_directory() 函数获取主题目录的绝对路径。在使用之前,需要将 $attachment_id 修改为你需要添加水印的图片 ID。