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
相关产品推荐
相关产品推荐

