欢迎访问宙启技术站
智能推送

如何利用PHP图片处理函数创建缩略图和水印效果

发布时间:2023-06-04 16:48:44

PHP是一种流行的服务器端脚本语言,提供了强大的图像处理功能。我们可以利用PHP的图像处理函数来创建缩略图和水印效果,以提高网站的用户体验和品牌形象。

创建缩略图

缩略图是原始图像的小尺寸版本,在网站中使用缩略图可以节省带宽和加载时间,同时提高用户的浏览体验。我们可以使用PHP的图像处理函数GD库和Imagick来创建缩略图。

使用GD库创建缩略图:

//指定缩略图的宽度和高度
$thumb_width = 200;
$thumb_height = 200;

//获取原始图像的尺寸和类型
list($img_width, $img_height, $img_type) = getimagesize($filename);

//根据原始图像类型创建图像对象
switch($img_type) {
    case IMAGETYPE_JPEG:
        $img = imagecreatefromjpeg($filename); //创建JPEG图像
        break;
    case IMAGETYPE_PNG:
        $img = imagecreatefrompng($filename); //创建PNG图像
        break;
    case IMAGETYPE_GIF:
        $img = imagecreatefromgif($filename); //创建GIF图像
        break;
    default:
        die('Unsupported image type'); //不支持的图像类型
}

//计算缩略图的比例和尺寸
if($img_width > $img_height) { //原始图像宽度大于高度
    $thumb_scale = $thumb_width / $img_width;
} else { //原始图像高度大于宽度
    $thumb_scale = $thumb_height / $img_height;
}
$thumb_width = round($img_width * $thumb_scale); //等比例缩放宽度
$thumb_height = round($img_height * $thumb_scale); //等比例缩放高度

//创建缩略图对象
$thumb = imagecreatetruecolor($thumb_width, $thumb_height);

//复制和缩放原始图像到缩略图中
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $thumb_width, $thumb_height, $img_width, $img_height);

//保存缩略图到文件
imagejpeg($thumb, $thumb_filename); //保存为JPEG格式
//imagepng($thumb, $thumb_filename); //保存为PNG格式
//imagegif($thumb, $thumb_filename); //保存为GIF格式

//释放内存资源
imagedestroy($thumb);
imagedestroy($img);

使用Imagick创建缩略图:

//指定缩略图的宽度和高度
$thumb_width = 200;
$thumb_height = 200;

//创建Imagick对象
$img = new Imagick($filename);

//缩略图处理
$img->cropThumbnailImage($thumb_width, $thumb_height);

//保存缩略图到文件
$img->writeImage($thumb_filename);

//释放内存资源
$img->destroy();

创建水印效果

水印是一种在图像上叠加半透明的文字或图像的效果,通常用于保护版权和品牌宣传。我们可以使用PHP的GD库和Imagick来创建水印效果。

使用GD库创建水印效果:

//定义水印文字和字体
$watermark_text = 'Copyright @ 2020';
$watermark_font = 'arial.ttf';

//获取原始图像的尺寸和类型
list($img_width, $img_height, $img_type) = getimagesize($filename);

//根据原始图像类型创建图像对象
switch($img_type) {
    case IMAGETYPE_JPEG:
        $img = imagecreatefromjpeg($filename); //创建JPEG图像
        break;
    case IMAGETYPE_PNG:
        $img = imagecreatefrompng($filename); //创建PNG图像
        break;
    case IMAGETYPE_GIF:
        $img = imagecreatefromgif($filename); //创建GIF图像
        break;
    default:
        die('Unsupported image type'); //不支持的图像类型
}

//创建水印文字对象
$watermark = imagecreatetruecolor($img_width, $img_height);
imagealphablending($watermark, false);
imagesavealpha($watermark, true); //支持透明度
$white = imagecolorallocatealpha($watermark, 255, 255, 255, 127);
$font_size = 30; //水印文字尺寸
$angle = 0; //水印文字旋转角度
$bbox = imagettfbbox($font_size, $angle, $watermark_font, $watermark_text);
$x = $img_width / 2 - ($bbox[4] - $bbox[0]) / 2; //水印文字X坐标
$y = $img_height / 2 - ($bbox[5] - $bbox[1]) / 2; //水印文字Y坐标
imagettftext($watermark, $font_size, $angle, $x, $y, $white, $watermark_font, $watermark_text);

//合并原始图像和水印对象
imagecopymerge($img, $watermark, 0, 0, 0, 0, $img_width, $img_height, 50); //透明度50%

//保存合并后的图像到文件
imagejpeg($img, $watermark_filename); //保存为JPEG格式
//imagepng($img, $watermark_filename); //保存为PNG格式
//imagegif($img, $watermark_filename); //保存为GIF格式

//释放内存资源
imagedestroy($watermark);
imagedestroy($img);

使用Imagick创建水印效果:

//定义水印文字和字体
$watermark_text = 'Copyright @ 2020';
$watermark_font = 'arial.ttf';

//创建Imagick对象
$img = new Imagick($filename);

//创建水印文字对象
$draw = new ImagickDraw();
$draw->setFont($watermark_font);
$draw->setFontSize(30);
$draw->setFillColor(new ImagickPixel('white'));
$draw->setGravity(Imagick::GRAVITY_CENTER); //水印文字居中

$metrics = $img->queryFontMetrics($draw, $watermark_text);

//背景框
$background = new Imagick();
$background->newImage($metrics['textWidth']+30, $metrics['textHeight']+30, new ImagickPixel('none'));

$background->drawImage($draw);
$background->setImageFormat("png");
$background->setImageOpacity(0.5); //透明度50%

//合并原始图像和水印对象
$img->compositeImage($background, Imagick::COMPOSITE_OVER, $img->getImageWidth()/2-$metrics['textWidth']/2, $img->getImageHeight()/2-$metrics['textHeight']/2);

//保存合并后的图像到文件
$img->writeImage($watermark_filename);

//释放内存资源
$img->destroy();

总结

通过本文介绍,我们了解了PHP中创建缩略图和水印效果的基本思路和实现方法。具体的实现代码需要根据实际情况进行调整和优化。在网站开发中,使用PHP图像处理函数可以提供更好的用户体验和品牌形象,也可以提高网站的性能和安全性。