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');

4. 总结