1. 环境准备
首先,确保你的PHP环境已经安装并启用了GD库。在php.ini文件中,找到如下配置行:
extension=php_gd2
如果这一行前面有分号,去掉分号,然后重启服务器以应用更改。
2. 选择水印类型
2.1 文字水印
function addTextWatermark($srcImg, $text, $fontFile, $fontSize, $color, $position, $outputPath) {
// 创建原始图片资源
$image = imagecreatefromjpeg($srcImg);
// 加载字体文件
$font = imageloadfont($fontFile);
// 设置字体颜色
$white = imagecolorallocate($image, $color[0], $color[1], $color[2]);
// 根据位置添加文字水印
switch ($position) {
case 1: // 顶部居左
imagettftext($image, $fontSize, 0, 10, 20, $white, $font, $text);
break;
case 2: // 顶部居右
imagettftext($image, $fontSize, 0, imagesx($image) - imagettfbbox($fontSize, 0, $font, $text)[2], 20, $white, $font, $text);
break;
case 3: // 居中
imagettftext($image, $fontSize, 0, (imagesx($image) - imagettfbbox($fontSize, 0, $font, $text)[2]) / 2, (imagesy($image) - imagettfbbox($fontSize, 0, $font, $text)[7]) / 2, $white, $font, $text);
break;
// 其他位置...
}
// 输出水印后的图片
imagejpeg($image, $outputPath);
// 释放图片资源
imagedestroy($image);
}
2.2 图片水印
function addImageWatermark($srcImg, $waterImg, $position, $outputPath) {
// 创建原始图片资源
$image = imagecreatefromjpeg($srcImg);
// 加载水印图片资源
$water = imagecreatefrompng($waterImg);
// 获取水印图片的尺寸
$waterWidth = imagesx($water);
$waterHeight = imagesy($water);
// 根据位置添加图片水印
switch ($position) {
case 1: // 顶部居左
imagecopy($image, $water, 10, 10, 0, 0, $waterWidth, $waterHeight);
break;
case 2: // 顶部居右
imagecopy($image, $water, imagesx($image) - $waterWidth - 10, 10, 0, 0, $waterWidth, $waterHeight);
break;
case 3: // 居中
imagecopy($image, $water, (imagesx($image) - $waterWidth) / 2, (imagesy($image) - $waterHeight) / 2, 0, 0, $waterWidth, $waterHeight);
break;
// 其他位置...
}
// 输出水印后的图片
imagejpeg($image, $outputPath);
// 释放图片资源
imagedestroy($image);
imagedestroy($water);
}
3. 实践操作
addTextWatermark('image.jpg', '版权所有', 'arial.ttf', 20, array(255, 255, 255), 1, 'output_image.jpg');
或者:
addImageWatermark('image.jpg', 'watermark.png', 1, 'output_image.jpg');