一、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更为复杂,但提供了更多的灵活性和控制力。

四、实际应用中的注意事项

  1. 安全性:在处理用户上传的图片时,务必进行严格的安全检查,避免潜在的安全风险。
  2. 资源优化:在处理大图片或复杂操作时,注意优化代码,避免过度消耗服务器资源。
  3. 缓存机制:对于频繁处理的图片,建议使用缓存机制,提高响应速度。

五、总结