PHP图片处理函数汇总及实例演示
在网站开发中,图片处理一直是一个非常重要的工作。PHP作为一种流行的服务器端编程语言,提供了很多图片处理函数,可以轻松处理各种图片格式,比如生成缩略图、添加水印、旋转、裁剪等等。本文将介绍一些必备的图片处理函数,并提供一些实例演示。
一、生成缩略图
生成缩略图是图片处理中最常见的操作之一。PHP提供了几种生成缩略图的函数,这里我们介绍一个最基础的函数。
function create_thumbnail($original_image_path, $thumbnail_image_path, $max_height, $max_width)
{
list($original_width, $original_height, $original_type) = getimagesize($original_image_path);
$width_ratio = $original_width / $max_width;
$height_ratio = $original_height / $max_height;
if ($width_ratio >= $height_ratio) {
$new_width = $max_width;
$new_height = $original_height / $width_ratio;
} else {
$new_width = $original_width / $height_ratio;
$new_height = $max_height;
}
switch ($original_type) {
case IMAGETYPE_GIF:
$old_image = imagecreatefromgif($original_image_path);
break;
case IMAGETYPE_JPEG:
$old_image = imagecreatefromjpeg($original_image_path);
break;
case IMAGETYPE_PNG:
$old_image = imagecreatefrompng($original_image_path);
break;
default:
return false;
}
$new_image = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($new_image, $old_image, 0, 0, 0, 0, $new_width, $new_height, $original_width, $original_height);
switch ($original_type) {
case IMAGETYPE_GIF:
imagegif($new_image, $thumbnail_image_path);
break;
case IMAGETYPE_JPEG:
imagejpeg($new_image, $thumbnail_image_path, 90);
break;
case IMAGETYPE_PNG:
imagepng($new_image, $thumbnail_image_path);
break;
default:
return false;
}
imagedestroy($old_image);
imagedestroy($new_image);
return true;
}
这个函数接收四个参数:
- $original_image_path:原始图片的路径。
- $thumbnail_image_path:缩略图的路径。
- $max_height:缩略图最大高度。
- $max_width:缩略图最大宽度。
我们首先使用getimagesize函数获取原始图片的相关信息,然后计算出缩略图的尺寸。接着根据原始图片的类型创建一个新的图片,并将原始图片缩放到新的尺寸。最后,根据原始图片的类型保存新的缩略图。函数返回true表示生成成功,返回false则表示生成失败。
二、添加水印
添加水印是常见的图片处理操作之一,也可以提高图片的版权保护。这里我们介绍一个用于添加文本水印的函数。
function add_text_watermark($image_path, $text, $font_path, $font_size, $opacity, $position)
{
$image_info = getimagesize($image_path);
$image_width = $image_info[0];
$image_height = $image_info[1];
$image_type = $image_info[2];
switch ($image_type) {
case IMAGETYPE_GIF:
$image = imagecreatefromgif($image_path);
break;
case IMAGETYPE_JPEG:
$image = imagecreatefromjpeg($image_path);
break;
case IMAGETYPE_PNG:
$image = imagecreatefrompng($image_path);
break;
default:
return false;
}
$color = imagecolorallocatealpha($image, 255, 255, 255, $opacity);
$text_box = imagettfbbox($font_size, 0, $font_path, $text);
$text_width = $text_box[2] - $text_box[0];
$text_height = $text_box[1] - $text_box[7];
switch ($position) {
case 'top-left':
$x = 0;
$y = 0;
break;
case 'top-center':
$x = ($image_width - $text_width) / 2;
$y = 0;
break;
case 'top-right':
$x = $image_width - $text_width;
$y = 0;
break;
case 'middle-left':
$x = 0;
$y = ($image_height + $text_height) / 2;
break;
case 'middle-center':
$x = ($image_width - $text_width) / 2;
$y = ($image_height + $text_height) / 2;
break;
case 'middle-right':
$x = $image_width - $text_width;
$y = ($image_height + $text_height) / 2;
break;
case 'bottom-left':
$x = 0;
$y = $image_height - $text_height;
break;
case 'bottom-center':
$x = ($image_width - $text_width) / 2;
$y = $image_height - $text_height;
break;
case 'bottom-right':
$x = $image_width - $text_width;
$y = $image_height - $text_height;
break;
default:
return false;
}
imagettftext($image, $font_size, 0, $x, $y, $color, $font_path, $text);
switch ($image_type) {
case IMAGETYPE_GIF:
imagegif($image, $image_path);
break;
case IMAGETYPE_JPEG:
imagejpeg($image, $image_path, 90);
break;
case IMAGETYPE_PNG:
imagepng($image, $image_path);
break;
default:
return false;
}
imagedestroy($image);
return true;
}
这个函数接收六个参数:
- $image_path:要添加水印的图片路径。
- $text:水印文本。
- $font_path:字体文件路径。
- $font_size:字体大小。
- $opacity:水印透明度。
- $position:水印位置,可以是top-left、top-center、top-right、middle-left、middle-center、middle-right、bottom-left、bottom-center、bottom-right。
函数的实现比较简单。首先,我们根据原始图片的类型创建一个新的图片对象。接着,根据传入的参数,计算文本框的宽度和高度,并根据位置参数计算文本框的坐标。最后,在图片上绘制文本,并根据原始图片的类型保存水印图片。
三、旋转图片
旋转图片是常见的图片处理操作之一。这里我们介绍一个简单的旋转图片函数。
function rotate_image($image_path, $degrees)
{
$image_info = getimagesize($image_path);
$image_type = $image_info[2];
switch ($image_type) {
case IMAGETYPE_GIF:
$image = imagecreatefromgif($image_path);
break;
case IMAGETYPE_JPEG:
$image = imagecreatefromjpeg($image_path);
break;
case IMAGETYPE_PNG:
$image = imagecreatefrompng($image_path);
break;
default:
return false;
}
$rotated_image = imagerotate($image, $degrees, 0);
switch ($image_type) {
case IMAGETYPE_GIF:
imagegif($rotated_image, $image_path);
break;
case IMAGETYPE_JPEG:
imagejpeg($rotated_image, $image_path, 90);
break;
case IMAGETYPE_PNG:
imagepng($rotated_image, $image_path);
break;
default:
return false;
}
imagedestroy($image);
imagedestroy($rotated_image);
return true;
}
这个函数接收两个参数:
- $image_path:要旋转的图片路径。
- $degrees:逆时针旋转角度。
函数的实现非常简单,只需要根据原始图片的类型创建一个新的图片对象
