一、GD库实现图片水印
1.1 GD库简介
GD库是PHP中用于处理图像的一个扩展库,支持多种图像格式,如JPEG、PNG和GIF。它提供了一系列函数,用于创建、操作和输出图像。
1.2 文字水印的实现
<?php
// 打开图片
$src = "aeroplane.jpg";
$info = getimagesize($src);
$type = imagetype($info[2]);
$func = "imagecreatefrom$type";
$image = $func($src);
// 操作图片
$font = "STXINGKA.ttf";
$content = "你好 mooc";
$color = imagecolorallocatealpha($image, 255, 255, 255, 50);
imagettftext($image, 60, 0, 60, 120, $color, $font, $content);
// 输出图片
header("Content-type:" . $info['mime']);
$outputFunc = "image$type";
$outputFunc($image);
// 保存图片
$outputFunc($image, "newimage." . $type);
// 销毁图片
imagedestroy($image);
?>
1.3 图片水印的实现
<?php
// 打开图片
$dstPath = 'img/1.jpg';
$srcPath = 'img/syt.jpg';
$dst = imagecreatefromstring(file_get_contents($dstPath));
$src = imagecreatefromstring(file_get_contents($srcPath));
// 获取水印图片的宽高
list($srcW, $srcH) = getimagesize($srcPath);
// 将水印图片复制到目标图片上
imagecopymerge($dst, $src, 100, 150, 0, 0, $srcW, $srcH, 50);
// 输出图片
list($dstW, $dstH, $dstType) = getimagesize($dstPath);
header("Content-type:image/$dstType");
imagejpeg($dst);
// 销毁图片
imagedestroy($dst);
imagedestroy($src);
?>
二、Imagick库实现图片水印
2.1 Imagick库简介
Imagick是PHP的一个扩展库,基于ImageMagick工具包,提供了更为强大和高效的图像处理功能。它支持更多的图像格式和复杂的图像操作。
2.2 文字水印的实现
<?php
$image = new Imagick('aeroplane.jpg');
$draw = new ImagickDraw();
$draw->setFont('STXINGKA.ttf');
$draw->setFontSize(60);
$draw->setFillColor('rgba(255, 255, 255, 0.5)');
$draw->annotation(60, 120, '你好 mooc');
$image->drawImage($draw);
// 输出图片
header("Content-Type: image/jpeg");
echo $image;
// 保存图片
$image->writeImage('newimage.jpg');
// 清理资源
$image->clear();
$image->destroy();
?>
2.3 图片水印的实现
<?php
$dstImage = new Imagick('img/1.jpg');
$srcImage = new Imagick('img/syt.jpg');
$dstImage->compositeImage($srcImage, Imagick::COMPOSITE_OVERLAY, 100, 150);
// 输出图片
header("Content-Type: image/jpeg");
echo $dstImage;
// 保存图片
$dstImage->writeImage('newimage.jpg');
// 清理资源
$dstImage->clear();
$dstImage->destroy();
$srcImage->clear();
$srcImage->destroy();
?>
三、GD库与Imagick库的对比
3.1 性能
3.2 功能
Imagick库支持更多的图像格式和复杂的图像操作,如滤镜效果、图像变形等。GD库功能相对简单,但足以应对大多数基本图像处理需求。
3.3 易用性
GD库的API较为简单直观,适合初学者上手。Imagick库的API更为复杂,但提供了更多的灵活性和控制力。
四、实际应用中的注意事项
- 安全性:在处理用户上传的图片时,务必进行严格的安全检查,避免潜在的安全风险。
- 资源优化:在处理大图片或复杂操作时,注意优化代码,避免过度消耗服务器资源。
- 缓存机制:对于频繁处理的图片,建议使用缓存机制,提高响应速度。