You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress自定义图片尺寸水印:排除指定尺寸不添加水印

如何排除WordPress指定图片尺寸不添加水印?

你可以通过在循环中添加尺寸判断逻辑,跳过不需要加水印的图片尺寸来实现需求。具体修改方案如下:

修改后的完整代码

function add_watermark_to_image( $attachment_id ) {
    $image_sizes             = get_intermediate_image_sizes();
    $watermark_attachment_id = 12916; // 替换为你的水印附件ID
    $excluded_sizes          = array('post-featured-image'); // 定义需要排除的尺寸

    foreach ( $image_sizes as $size ) {
        // 跳过排除列表中的尺寸
        if (in_array($size, $excluded_sizes)) {
            continue;
        }

        // 获取对应尺寸的缩略图路径(修正原代码的路径错误)
        $image_meta = wp_get_attachment_metadata($attachment_id);
        if (!isset($image_meta['sizes'][$size])) {
            continue; // 若该尺寸不存在,直接跳过
        }
        $image_path = pathinfo(get_attached_file($attachment_id), PATHINFO_DIRNAME) . '/' . $image_meta['sizes'][$size]['file'];
        $watermark_path = get_attached_file( $watermark_attachment_id );

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

            if ( $image && $watermark ) {
                list( $image_width, $image_height )         = getimagesize( $image_path );
                list( $watermark_width, $watermark_height ) = getimagesize( $watermark_path );

                // 设置水印居中位置
                $dest_x = ($image_width - $watermark_width) / 2;
                $dest_y = ($image_height - $watermark_height) / 2;

                imagecopy( $image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height );

                // 保存加水印后的图片,添加质量参数平衡体积与清晰度
                imagejpeg( $image, $image_path, 85 );

                imagedestroy( $image );
                imagedestroy( $watermark );
            } else {
                error_log( '创建图片或水印失败,尺寸:' . $size );
            }
        } else {
            error_log( '图片或水印未找到,尺寸:' . $size );
        }
    }
}

add_action( 'add_attachment', 'add_watermark_to_image' );

关键修改说明

  • 添加排除尺寸数组:定义$excluded_sizes数组,将不需要加水印的尺寸名称(如post-featured-image)纳入其中。
  • 循环内判断跳过:在foreach循环起始位置,用in_array检查当前尺寸是否属于排除列表,若是则执行continue跳过该尺寸的加水印流程。
  • 修正图片路径问题:原代码使用get_attached_file($attachment_id)获取原图路径,会导致所有尺寸循环都修改同一张原图。修改后通过wp_get_attachment_metadata获取对应尺寸的缩略图路径,确保每个尺寸的图片被独立处理。
  • 优化图片保存质量:为imagejpeg添加质量参数(示例设为85),平衡图片体积与质量,避免过度压缩。

内容的提问来源于stack exchange,提问作者Pityer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 11:05:08