PHP图像处理函数:制作缩略图、水印等操作指南
PHP是一种开放源代码高级通用脚本语言,常用于制作动态Web页面和网站开发。它包含了大量扩展模块,其中就包括了图像处理模块。利用这些模块,我们可以很轻松地对图片进行缩放、裁切、旋转、添加水印等操作,进而满足我们对图片的各种需求。本文将详细介绍PHP中一些常用的图像处理函数,并且给出各自的代码示例。
一、制作缩略图
在网站开发中,大量的图片可能占用过多存储空间和带宽,会导致网站响应变慢,所以需要对图片进行缩略处理。下面就是PHP中制作缩略图的代码:
//打开图片
$src = imagecreatefromjpeg('1.jpg');
//获取原图宽高
list($width, $height) = getimagesize('1.jpg');
//设置缩略图宽高
$newwidth = $width * 0.5;//宽缩小一半
$newheight = $height * 0.5;//高缩小一半
//创建一个空白缩略图
$thumb = imagecreatetruecolor($newwidth, $newheight);
//将原图缩放到缩略图中
imagecopyresampled($thumb, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
//输出缩略图
imagejpeg($thumb, '1_thumb.jpg');
//释放内存
imagedestroy($src);
imagedestroy($thumb);
我们先打开图片,然后获取原始图片的宽高,根据缩放比例算出缩略图的宽高,创建一个新的空白画布,把原图缩放到新画布中,并输出保存成新图片,最后释放资源。
二、添加水印
网站上多数情况下都会加上水印来防止图片被盗用,以显示版权信息。关于水印,我们可以使用imagettftext函数来进行操作。下面是加水印操作的代码:
//打开图片
$img = imagecreatetruecolor(500, 500);//创建一个500x500的画布
//画布背景色
$bg = imagecolorallocate($img, 255, 255, 255);
//字体颜色
$color = imagecolorallocate($img, 255, 0, 0);
//字体文件
$fontFile = 'arial.ttf';
//水印文本
$text = 'www.abc.com';
//写入水印
imagettftext($img, 20, 0, 100, 250, $color, $fontFile, $text);
//输出
header('Content-Type:image/jpeg');
imagejpeg($img);
imagedestroy($img);
我们先创建一个500x500的画布,将画布背景色设置为白色,字体颜色设置为红色,设置字体文件,然后将水印文本写入画布中,最后输出图片。如果想添加图片水印,我们可以使用imagecopy函数来添加。下面是添加图片水印的代码:
//打开原图
$src = imagecreatefromjpeg('1.jpg');
//打开水印图
$watermark = imagecreatefrompng('watermark.png');
//获取水印图宽高
list($width, $height) = getimagesize('watermark.png');
//加水印
imagecopy($src, $watermark, 0, 0, 0, 0, $width, $height);
//输出
imagejpeg($src, '1_watermark.jpg');
//释放内存
imagedestroy($src);
imagedestroy($watermark);
我们先打开原图,然后打开水印图,获取水印图的宽高,将水印图添加到原图中,输出原图,最后释放内存即可。
三、进行图片裁剪
有时候我们想裁剪图片,突出图片中主要的部分,这时候,我们可以使用imagecopyresampled函数进行裁剪操作。下面就是PHP中对图片进行裁剪操作的代码:
//打开图片
$img = imagecreatefromjpeg('1.jpg');
//获取原图宽高
list($width, $height) = getimagesize('1.jpg');
//设置裁剪尺寸
$thumbSize = 200;
//计算出画布宽高,目标画布宽高应该相等
$canvasWidth = $canvasHeight = $thumbSize;
//计算缩放比例和位置
$ratio = max($width/$canvasWidth, $height/$canvasHeight);
$newWidth = $width/$ratio;
$newHeight = $height/$ratio;
$cropX = ($newWidth-$canvasWidth)/2;
$cropY = ($newHeight-$canvasHeight)/2;
//创建一个空白画布
$canvas = imagecreatetruecolor($canvasWidth, $canvasHeight);
//将图片缩放到画布中
imagecopyresampled($canvas,$img,0,0,$cropX,$cropY,$canvasWidth,$canvasHeight,$newWidth,$newHeight);
//输出画布
header('Content-Type:image/jpeg');
imagejpeg($canvas);
//释放内存
imagedestroy($img);
imagedestroy($canvas);
我们先打开图片,获取原图的宽高,然后设置裁剪尺寸,计算出目标画布的宽高和缩放比例以及坐标位置,创建一个空白画布,将原图缩放到画布中,输出图像并释放内存。
以上是几种常用的图像处理操作,读者可以根据需求使用其中的想操作函数,进行图片的增删改查。
