PHP实现图片上传与处理功能:从上传到缩放裁剪的完整指南

概述:
在 Web 开发领域,图片的上传以及处理是极为常见的功能。本文将会讲解怎样运用 PHP 去达成图片的上传与处理功能,这里面涵盖了上传图片这一操作,还有对图片进行验证以及处理等相关操作。
一、图片上传
图片上传是实现图片功能的起始步骤。以下为一个简单的图片上传代码示例:
// 检查是否有文件上传
if(isset($_FILES['image'])){
$errors = array();
变量 $file_name 等于 $_FILES 数组中 'image' 键对应的值里的 'name' 键的值。
$_FILES['image']['size'] 这个值被赋给了变量 $file_size 。
将文件上传的临时文件名赋值给变量 $file_tmp,该临时文件名来自于名为 'image' 的表单元素的上传文件的临时文件名,即 $_FILES['image']['tmp_name'] 被赋值给了 $file_tmp 。
$_FILES['image']['type'] 的值被赋给了 $file_type 。
获取文件扩展名,先将文件名称通过 explode('.', $_FILES['image']['name']) 方法以点号分割成数组,然后使用 end 函数获取数组中的最后一个元素,再将其通过 strtolower 函数转换为小写形式,最终赋值给 $file_ext 变量。
$extensions 包含的元素有“jpeg”、“jpg”以及“png”。这些元素构成了一个数组。
// 检查上传图片的格式是否符合要求
如果在数组 $extensions 中找不到 $file_ext ,那么结果为 false 。 也就是说,判断 $file_ext 是否在 $extensions 数组中,如果不在,就返回 false 。 当 $file_ext 不在 $extensions 数组里时,条件表达式 in_array($file_ext, $extensions) 的结果是 false 。 只有当 $file_ext 存在于 $extensions 数组中时,in_array($file_ext, $extensions) 的结果才不为 false 。
$errors 被添加了“只允许上传 JPEG 或 PNG 格式的图片”。
}
// 检查上传图片的大小是否符合要求
if($file_size > 2097152){
$errors[] = "图片大小不得超过2MB";
}
// 如果没有错误,将图片移动到指定目录
if(empty($errors) == true){
将上传的文件从临时位置移动到指定路径,即把 $file_tmp 这个临时文件移动到 "uploads/" 加上 $file_name 所组成的路径中。
echo "图片上传成功";
}else{
print_r($errors);
}
}
登录后复制
以上代码首先会去检查是否存在文件上传的情况。接着,利用 $_FILES 数组来获取上传文件的相关信息,这些信息包含了文件名、文件大小、临时文件名以及文件类型等。随后,我们针对上传文件的格式以及大小展开了验证工作。在验证通过之后,把文件移动到特定的目录当中,从而实现了文件的上传成功。
二、图片处理
在实际的应用场景里,我们一般还得对上传的图片实施一些处理,像进行缩放操作、实施裁剪动作或者添加水印之类的。以下给出一个较为简单的关于图片缩放和裁剪的示例代码:
// 缩放图片
定义一个名为 imageResize 的函数,该函数接受三个参数,分别是 $file_name、$width 和 $height 。
获取图片尺寸信息,即获取文件名 $file_name 对应的图片的宽度和高度,将其分别存储在变量 $image_width 和 $image_height 中,通过 getimagesize 函数来实现这一操作,获取到的图片尺寸信息以数组形式返回,数组的第一个元素为宽度,第二个元素为高度,即 list($image_width, $image_height) = getimagesize($file_name)。
$new_width = $width;
$new_height = $height;
创建一个具有指定新宽度和新高度的真彩色图像,这个图像被赋值给变量 $image 。
创建一个图像资源变量 $old_image ,通过调用 imagecreatefromjpeg 函数并传入 $file_name 作为参数来获取图像数据并创建图像资源。
使用 imagecopyresized 函数,将 $image 复制并调整大小到 $old_image ,起始坐标为 0,0 ,目标尺寸为 $new_width 和 $new_height ,原始图像尺寸为 $image_width 和 $image_height 。
return $image;
}
// 裁剪图片
这个函数用于对图像进行裁剪操作。它需要传入图像文件名、裁剪起始 x 坐标、裁剪起始 y 坐标、裁剪宽度和裁剪高度这几个参数。通过这些参数,函数能够准确地对指定的图像进行裁剪处理。
通过 $file_name 来创建一个 JPEG 图像,创建出的图像存储在 $image 中。
使用 imagecrop 函数对图像 $image 进行裁剪操作,设置裁剪区域的 x 坐标为 $start_x,y 坐标为 $start_y,宽度为 $width,高度为 $height,得到裁剪后的图像 $cropped_image。
return $cropped_image;
}
// 调用示例
$uploaded_image 等于 "uploads/" 加上 $file_name ;$uploaded_image 是用于存储上传文件路径的变量 ;它由 "uploads/" 和具体的文件名 $file_name 组合而成 。
$resized_image 是通过对 $uploaded_image 进行图像缩放操作得到的,缩放后的尺寸为 300 像素宽和 200 像素高。
$cropped_image 是通过 imageCrop 函数对 $uploaded_image 进行裁剪操作得到的,裁剪的尺寸分别为 50、50、200、150。
使用 imagejpeg 函数对 $resized_image 进行处理,并将结果保存为 "uploads/resized_". $file_name 。
将裁剪后的图像进行 imagejpeg 处理,处理的目标路径为 "uploads/cropped_" 与 $file_name 拼接后的路径。
登录后复制
以上代码定义了两个函数,其中 imageResize 用来对图片进行缩放操作,imageCrop 则用于对图片进行裁剪操作。在实际的应用过程里,可以依据需求来调用这些函数以进行图片处理。并且通过 imagejpeg 函数把处理过后的图片保存到特定的目录中。
结论:
通过上述代码示例,我们能够利用 PHP 达成图片上传与处理的功能。你可以依据实际的需求来对其进行修改和拓展,以实现更为复杂且丰富的图片功能。期望本文可以给你带来一定的帮助!