php 上传的图片加水印
时间: 2024-10-01 11:13:00 浏览: 34
PHP 中添加图片水印通常涉及以下几个步骤:
1. **文件上传**:首先,使用 PHP 的 `$_FILES` 变量接收用户通过表单上传的图片。可以使用 `move_uploaded_file()` 函数将图片移动到服务器指定目录。
```php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
```
2. **加载图片并创建水印**:使用 `imagecreatefromjpeg()`, `imagecreatefrompng()`, 或 `imagecreatefromgif()` 函数加载原始图片,然后使用 `imagecreatetruecolor()` 创建一个新的用于放置水印的图像。
3. **绘制水印文字**:创建一个文本资源,设置字体、颜色和大小,然后使用 `imagettftext()` 函数在新图像上绘制水印文字。
4. **合并水印**:使用 `imagecopyresampled()` 或 `imagecopymerge()` 将带有水印的文字图层复制到原始图片上,调整位置和透明度。
5. **保存结果**:最后,使用 `imagejpeg()` 或 `imagepng()` 函数将处理后的图像保存到服务器。
这是一个简单的示例:
```php
// ... 之前的部分省略
$watermark_text = 'Watermark';
$font_size = 20;
$position_x = imagesx($watermark_img) / 2; // 水印文字中心点
$position_y = imagesy($watermark_img); // 通常放在图片底部
$watermark_position = imagettfbbox($font_size, 0, $font_path, $watermark_text);
$watermark_width = abs($watermark_position[2] - $watermark_position[0]);
$watermark_height = abs($watermark_position[7] - $watermark_position[1]);
// 计算水印偏移
$offset_x = ($watermark_width + $position_x > imagesx($image)) ? imagesx($image) - $watermark_width : 0;
$offset_y = imagesy($image);
// 添加水印
imagecopyresampled($image, $watermark_img, $offset_x, $offset_y, 0, 0, $watermark_width, $watermark_height, imagesx($watermark_img), imagesy($watermark_img));
// 保存图片
$new_filename = pathinfo($target_file, PATHINFO_FILENAME) . '_with_watermark.' . pathinfo($target_file, PATHINFO_EXTENSION);
imagejpeg($image, 'uploads/' . $new_filename);
// 清理内存
imagedestroy($image);
imagedestroy($watermark_img);
```
阅读全文