1. PHP图像处理基础
在开始添加水印之前,我们需要了解一些PHP图像处理的基础知识。
1.1 GD库
PHP内置了GD库,这是一个功能强大的图像处理库,支持多种图像格式,如JPG、PNG、GIF等。要使用GD库,确保在php.ini文件中启用了extension=php_gd2.dll(Windows)或extension=gd2(Unix/Linux)。
1.2 常用函数
以下是一些在PHP中处理图像时常用的函数:
imagecreatefromjpeg():从JPEG文件创建图像。imagecreatefrompng():从PNG文件创建图像。imagecreatefromgif():从GIF文件创建图像。getimagesize():获取图像的大小。imagecopymerge():将一个图像合并到另一个图像上。imagejpeg():输出JPEG图像。
2. 添加水印的基本步骤
添加水印的基本步骤如下:
- 打开源图像和水印图像。
- 获取图像的大小。
- 计算水印的位置。
- 使用
imagecopymerge()函数将水印图像复制到源图像上。 - 保存或输出处理后的图像。
3. 坐标定位技巧
水印的坐标定位是添加水印的关键步骤。以下是一些坐标定位的技巧:
3.1 定位策略
- 顶部居左:
x = 0; y = 0; - 顶部居中:
x = (image_width - logo_width) / 2; y = 0; - 顶部居右:
x = image_width - logo_width; y = 0; - 左边居中:
x = 0; y = (image_height - logo_height) / 2; - 图片中心:
x = (image_width - logo_width) / 2; y = (image_height - logo_height) / 2; - 右边居中:
x = image_width - logo_width; y = (image_height - logo_height) / 2; - 底部居左:
x = 0; y = image_height - logo_height; - 底部居中:
x = (image_width - logo_width) / 2; y = image_height - logo_height; - 底部居右:
x = image_width - logo_width; y = image_height - logo_height;
3.2 动态定位
如果需要动态定位水印,可以使用以下代码:
$position = rand(1, 9); // 随机选择水印位置
switch ($position) {
case 1:
$x = 0;
$y = 0;
break;
case 2:
$x = (image_width - logo_width) / 2;
$y = 0;
break;
// ... 其他位置
case 9:
$x = image_width - logo_width;
$y = image_height - logo_height;
break;
}
4. 实例代码
以下是一个简单的PHP代码示例,展示了如何添加水印:
<?php
// 打开源图像和水印图像
$sourceImage = imagecreatefromjpeg("source.jpg");
$watermarkImage = imagecreatefrompng("watermark.png");
// 获取图像的大小
$sourceWidth = imagesx($sourceImage);
$sourceHeight = imagesy($sourceImage);
$watermarkWidth = imagesx($watermarkImage);
$watermarkHeight = imagesy($watermarkImage);
// 计算水印的位置(以顶部居中为例)
$x = ($sourceWidth - $watermarkWidth) / 2;
$y = 0;
// 将水印图像复制到源图像上
imagecopymerge($sourceImage, $watermarkImage, $x, $y, 0, 0, $watermarkWidth, $watermarkHeight, 100);
// 保存或输出处理后的图像
imagejpeg($sourceImage, "output.jpg");
imagedestroy($sourceImage);
imagedestroy($watermarkImage);
?>