本教程详细介绍了如何利用PHP编程语言为图片添加文本及图像水印的技术与方法,帮助网站和个人博客增强版权保护或信息展示。
在使用PHP为图片添加水印(文字或图片)后发现生成的图片变得模糊的问题上,可以尝试以下方法来优化代码:
1. 确保使用的图像库支持高分辨率输出。
2. 在处理过程中保持原始图像的质量和大小不变。
3. 使用抗锯齿技术提高文本水印质量。
以下是解决办法示例代码:
```php
function addWatermark($originalImage, $watermarkPath, $position = bottom-right) {
// 获取原图信息
list($width, $height) = getimagesize($originalImage);
// 创建图像资源并设置高质量参数
$imageResource = imagecreatefromstring(file_get_contents($originalImage));
imagesavealpha($imageResource, true);
// 加载水印图片或创建文字水印
if (file_exists($watermarkPath)) {
$wmWidth = imagesx(imagecreatefrompng($watermarkPath));
$wmHeight = imagesy(imagecreatefrompng($watermarkPath));
imagecopyresampled(
$imageResource,
imagecreatefrompng($watermarkPath),
($width - $wmWidth) / 2, //居中
($height - $wmHeight) / 2,
0, 0,
$wmWidth,
$wmHeight,
imagesx(imagecreatefrompng($watermarkPath)),
imagesy(imagecreatefrompng($watermarkPath))
);
} else {
// 创建文字水印
$text = Your Text;
$fontFile = ./arial.ttf; // 字体文件路径
// 计算文本尺寸
$textBoxWidth = imagefontwidth(15) * strlen($text);
$wmImageResource = imagecreatetruecolor($textBoxWidth, 20);
imagesavealpha($wmImageResource, true);
// 设置颜色透明度
$bgColor = imagecolorallocatealpha($wmImageResource, 255, 255, 255, 127);
imagefilledrectangle($wmImageResource, 0, 0, $textBoxWidth+1, 30-1, $bgColor);
// 设置字体颜色
$textColor = imagecolorallocatealpha($wmImageResource , 96, 96, 96, 5);
// 添加文字水印
imagettftext(
$wmImageResource,
15,
0,
(imagesx($wmImageResource) - ($textBoxWidth /2)),
imagesy($wmImageResource),
$textColor,
$fontFile,
$text
);
// 将文字水印添加到原始图像上
imagecopyresampled(
$imageResource,
$wmImageResource,
($width - imagesx($wmImageResource)) / 2 , ($height - imagesy($wmImageResource)) / 2 ,
0, 0,
imagesx($wmImageResource), imagesy($wmImageResource),
imagesx($wmImageResource) * imageSXRatio,
imagesy($wmImageResource) * imageSYRatio
);
}
// 输出清晰的图片结果
header(Content-Type: image/png);
$quality = 9; // 调整输出质量,范围0-12,默认为7
imagepng($imageResource, null, $quality);
imagedestroy($wmImageResource);
imagedestroy($imageResource);
}
// 使用示例
addWatermark(path/to/original/image.png, path/to/watermark.png);
```
请根据实际情况调整代码中的参数,以确保最佳效果。