以下是为您提供的PHP中实现文字水印和图片水印的两种方法的示例代码。请注意,这些代码示例假设您已经有一个有效的PHP环境,并且具备基本的文件操作权限。
### 文字水印
<?php
// 文字水印函数
function addTextWatermark($imagePath, $text, $position = 'bottom-right', $fontSize = 20, $textColor = 'FFFFFF') {
// 加载图片
$image = imagecreatefromjpeg($imagePath);
if (!$image) {
return false;
}
// 文字颜色
$textColor = hexdec($textColor);
// 文字位置
list($width, $height) = getimagesize($imagePath);
switch ($position) {
case 'top-left':
$x = 10;
$y = 10;
break;
case 'top-right':
$x = $width - 10 - imagefontwidth(5) * strlen($text);
$y = 10;
break;
case 'bottom-left':
$x = 10;
$y = $height - 10 - imagefontheight(5);
break;
case 'bottom-right':
default:
$x = $width - 10 - imagefontwidth(5) * strlen($text);
$y = $height - 10 - imagefontheight(5);
break;
}
// 添加文字
imagestring($image, 5, $x, $y, $text, $textColor);
// 输出图片
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
}
// 使用示例
addTextWatermark('path/to/your/image.jpg', '水印文字', 'bottom-right', 20, 'FFFFFF');
?>
### 图片水印
<?php
// 图片水印函数
function addImageWatermark($srcImagePath, $watermarkImagePath, $position = 'bottom-right', $opacity = 50) {
// 加载图片和水印
$srcImage = imagecreatefromjpeg($srcImagePath);
$watermarkImage = imagecreatefrompng($watermarkImagePath);
if (!$srcImage || !$watermarkImage) {
return false;
}
// 获取尺寸
list($srcWidth, $srcHeight) = getimagesize($srcImagePath);
list($watermarkWidth, $watermarkHeight) = getimagesize($watermarkImagePath);
// 设置水印位置
switch ($position) {
case 'top-left':
$x = 10;
$y = 10;
break;
case 'top-right':
$x = $srcWidth - $watermarkWidth - 10;
$y = 10;
break;
case 'bottom-left':
$x = 10;
$y = $srcHeight - $watermarkHeight - 10;
break;
case 'bottom-right':
default:
$x = $srcWidth - $watermarkWidth - 10;
$y = $srcHeight - $watermarkHeight - 10;
break;
}
// 合并图片
imagecopymerge($srcImage, $watermarkImage, $x, $y, 0, 0, $watermarkWidth, $watermarkHeight, $opacity);
// 输出图片
header('Content-Type: image/jpeg');
imagejpeg($srcImage);
imagedestroy($srcImage);
imagedestroy($watermarkImage);
}
// 使用示例
addImageWatermark('path/to/your/image.jpg', 'path/to/your/watermark.png', 'bottom-right', 50);
?>
**注意**:
- 上述代码示例中,文字水印使用了`imagestring`函数,该函数仅适用于简单的文本和较小的字体。对于更复杂的需求,可能需要使用`imagettftext`函数。
- 图片水印的透明度通过`imagecopymerge`函数的最后一个参数控制,其值范围从0(完全透明)到100(完全不透明)。
- 请将`'path/to/your/image.jpg'`和`'path/to/your/watermark.png'`替换为您自己的图片和水印图片的路径。
- 这些函数直接输出处理后的图片,因此在实际应用中