前面写了一篇给图片加上水印的文章,《如何通过代码实现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( $
这段代码需要根据具体情况进行一些修改,主要包括以下几个位置:
$watermark_image_path
:水印图片的路径,需要将其修改为你自己水印图片的路径,例如:/path/to/watermark.png
。$watermark_transparency
:水印图片的透明度,建议设置为 50。$watermark_position
:水印图片的位置,建议设置为BR
,即右下角。$image_sizes
:需要添加水印的图片尺寸,如果你想要添加水印的图片尺寸不是thumbnail
,medium
和large
,则需要在这个数组中添加相应的尺寸。
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。
评论 (0)