php文字水印和php图片水印实现代码(二种加水印方法)


以下是为您提供的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'`替换为您自己的图片和水印图片的路径。

- 这些函数直接输出处理后的图片,因此在实际应用中