利用php制作图片水印,通过表单输入的位置信息来控制这个图片水印的位置,用完整代码显示
时间: 2023-05-29 13:07:30 浏览: 93
以下是一个简单的PHP图片水印代码示例,使用GD库在图像上叠加文本水印:
```
<?php
// 图片文件路径
$filename = 'example.jpg';
// 创建图像资源
$source = imagecreatefromjpeg($filename);
// 设置水印字体和大小
$font = 'arial.ttf';
$size = 20;
// 设置水印文本
$text = 'Watermark';
// 获取文本水印的尺寸
$bbox = imagettfbbox($size, 0, $font, $text);
// 获取图片尺寸
$width = imagesx($source);
$height = imagesy($source);
// 计算水印位置
$x = $width - $bbox[2] - 10; // 10为水印与图片右侧的间距
$y = $height - $bbox[3] - 10; // 10为水印与图片底部的间距
// 创建水印图像资源
$watermark = imagecreatetruecolor($bbox[2], $bbox[3]);
// 为水印图像创建白色背景
$white = imagecolorallocate($watermark, 255, 255, 255);
imagefill($watermark, 0, 0, $white);
// 设置水印文本颜色
$color = imagecolorallocate($watermark, 0, 0, 0);
// 在水印图像上写入文本
imagettftext($watermark, $size, 0, 0, $bbox[3], $color, $font, $text);
// 将水印图像叠加到原始图像上
imagecopy($source, $watermark, $x, $y, 0, 0, $bbox[2], $bbox[3]);
// 输出带有水印的图像
header('Content-Type: image/jpeg');
imagejpeg($source);
// 释放资源
imagedestroy($source);
imagedestroy($watermark);
?>
```
在上面的示例中,我们使用GD库创建了一个JPEG图像资源,并在其中添加了一个文本水印。我们可以使用表单来控制水印的位置,例如:
```
<form method="post" action="watermark.php">
<input type="text" name="x" placeholder="X轴坐标">
<input type="text" name="y" placeholder="Y轴坐标">
<input type="submit" value="添加水印">
</form>
```
然后在PHP代码中获取表单输入的值,用于计算水印位置:
```
// 获取表单输入的值,如果没有输入,则使用默认值
$x = isset($_POST['x']) ? intval($_POST['x']) : $width - $bbox[2] - 10;
$y = isset($_POST['y']) ? intval($_POST['y']) : $height - $bbox[3] - 10;
```
这样就可以通过表单来控制水印的位置了。完整的PHP代码如下:
```
<?php
// 图片文件路径
$filename = 'example.jpg';
// 创建图像资源
$source = imagecreatefromjpeg($filename);
// 设置水印字体和大小
$font = 'arial.ttf';
$size = 20;
// 设置水印文本
$text = 'Watermark';
// 获取文本水印的尺寸
$bbox = imagettfbbox($size, 0, $font, $text);
// 获取图片尺寸
$width = imagesx($source);
$height = imagesy($source);
// 获取表单输入的值,如果没有输入,则使用默认值
$x = isset($_POST['x']) ? intval($_POST['x']) : $width - $bbox[2] - 10;
$y = isset($_POST['y']) ? intval($_POST['y']) : $height - $bbox[3] - 10;
// 创建水印图像资源
$watermark = imagecreatetruecolor($bbox[2], $bbox[3]);
// 为水印图像创建白色背景
$white = imagecolorallocate($watermark, 255, 255, 255);
imagefill($watermark, 0, 0, $white);
// 设置水印文本颜色
$color = imagecolorallocate($watermark, 0, 0, 0);
// 在水印图像上写入文本
imagettftext($watermark, $size, 0, 0, $bbox[3], $color, $font, $text);
// 将水印图像叠加到原始图像上
imagecopy($source, $watermark, $x, $y, 0, 0, $bbox[2], $bbox[3]);
// 输出带有水印的图像
header('Content-Type: image/jpeg');
imagejpeg($source);
// 释放资源
imagedestroy($source);
imagedestroy($watermark);
?>
```
阅读全文