服务热线
1888888888
作者:文煞发布时间:2024-01-20分类:PHP笔记浏览:536
有几天没有更新了,主要是工作忙起来没有时间,下班后又啥都不想动!今天想和大家聊的是关于php如何上传图片、以及图片上传后的一些相关处理方法。不知道大家对这个感不感兴趣。不感兴趣也没有办法,能力有限!哈哈!
在使用使用PHP上传图片时,我们需要解决的问题有三个,第一个是上传图片;第二个是以指定文件名称或者路径保存图片;第三个是保存图片信息,比如图片大小、保存路径、图片文件名称、图片格式等一些相关信息,通常我们需要将他保存到mysql数据!
大家先来看一个使用php上传图片的案例代码:
<!DOCTYPE html> <html> <head> <title>图片上传</title> </head> <body> <h2>图片上传</h2> <form action="upload.php" method="POST" enctype="multipart/form-data"> <input type="file" name="image" required> <button type="submit">上传图片</button> </form> <p>文件名: <?php echo $fileName; ?></p > <p>文件类型: <?php echo $fileType; ?></p > <p>文件大小: <?php echo $imageSize; ?> bytes</p > <p>保存路径: <?php echo $targetPath; ?></p > </body> </html>
这段HTML代码创建了一个简单的表单,用户可以选择要上传的图片文件,并点击"上传图片"按钮。表单的action属性设置为PHP脚本的路径(这里设置未“upload.php”),method属性设置为POST,以确保数据以POST请求的形式发送。enctype属性设置为multipart/form-data,以支持文件上传。
当用户提交表单时,表单数据将会以post的方式发送到upload.php脚本,并使用下面的PHP代码进行处理。你可以将这段HTML代码嵌入到你的网页中,以创建一个用户友好的图片上传界面。记得根据实际情况修改表单的字段名和保存路径,以便与PHP脚本中的变量名称匹配。
<?php // 检查是否有文件上传错误 if ($_FILES['image']['error'] !== UPLOAD_ERR_OK) { die('文件上传错误: ' . $_FILES['image']['error']); } // 获取上传文件的信息 $fileName = $_FILES['image']['name']; $fileTmp = $_FILES['image']['tmp_name']; $fileType = $_FILES['image']['type']; $fileSize = $_FILES['image']['size']; // 保存文件到指定路径 $targetPath = 'uploads/' . $fileName; if (!move_uploaded_file($fileTmp, $targetPath)) { die('文件保存失败'); } // 获取图片信息(如大小、格式等) $imageInfo = pathinfo($targetPath); $imageType = strtolower($imageInfo['extension']); $imageSize = filesize($targetPath); // 输出图片信息和保存路径 echo '文件名: ' . $fileName . '<br>'; echo '文件类型: ' . $fileType . '<br>'; echo '文件大小: ' . $imageSize . ' bytes<br>'; echo '保存路径: ' . $targetPath; // 这里我们还可以把图片完整路径(包括文件名称)和图片信息存入mysql数据库 ?>
这段代码首先检查是否有文件上传错误,然后获取上传文件的信息,包括文件名、临时路径、文件类型和大小。接下来,使用move_uploaded_file函数将文件移动到指定路径,并检查文件保存是否成功。最后,通过pathinfo函数获取图片的完整信息,包括扩展名和大小,并输出这些信息。当然我们也可以帮他存入数据库,方便日后调用!
这只是一个基本的示例,你可以根据需要进行修改和扩展。另外,请注意在生产环境中对上传的文件进行适当的验证和安全性检查,以防止潜在的安全问题以及文件夹的权限检查(以免无法保存图片)!
当然,除了上传、保存图片以外,你还可以在保存图片之前对上传的图片做一些优化处理之后再进行保存!
$imageInfo = getimagesize($targetPath); $imageWidth = $imageInfo[0]; $imageHeight = $imageInfo[1]; $imageType = $imageInfo[2]; $imageAttr = $imageInfo[3]; //判断图片是不是200*200尺寸的图片 if ($imageWidth == '200' and $imageHeight == '200'){ echo '是200*200的图片!'; }else{ echo '不是200*200的图片'; } // 输出图片宽度和高度 echo '图片宽度:' . $imageWidth . ' 像素<br>'; echo '图片高度:' . $imageHeight . ' 像素<br>';
这里的作用可以用于判断上传的图片的几何尺寸是否符合要求,常用于一些处理用户上传的头像以及一些文章专题的封面,为了满足网站整体的美观,需要对图片的尺寸大小进行限制!
switch ($imageType) { case IMAGETYPE_JPEG: $image = imagecreatefromjpeg($targetPath); imagejpeg($image, 'output.jpg', 90); // 保存为JPEG格式 break; case IMAGETYPE_PNG: $image = imagecreatefrompng($targetPath); imagepng($image, 'output.png'); // 保存为PNG格式 break; case IMAGETYPE_GIF: $image = imagecreatefromgif($targetPath); imagegif($image, 'output.gif'); // 保存为GIF格式 break; // 其他格式类似... }
$newWidth = 200; // 新的宽度 $newHeight = 200; // 新的高度 // 创建新的图像对象并调整尺寸 $newImage = imagecreatetruecolor($newWidth, $newHeight); imagecopyresampled($newImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $imageWidth, $imageHeight); // 保存调整后的图片 imagejpeg($newImage, 'resized.jpg');
对于一些不符合要求的图片,当然我们除了要求上传图片的用户处理好以后重新上传以外,我们还可以利用PHP对图像的尺寸进行裁剪或者压缩!但是裁剪或者压缩的效果可能不满足用户的要求!
调整图片尺寸的方式大致有两种方法:1裁剪(剪裁图片到指定尺寸);2等比例压缩或拉伸(按比例调整图片尺寸,保持宽高比)。下面我们来分别介绍这两种方式的实现方法。
1. 裁剪图片到指定尺寸:
$sourcePath = 'image.jpg'; // 原始图片路径 $targetPath = 'cropped.jpg'; // 裁剪后保存的图片路径 $sourceImage = imagecreatefromjpeg($sourcePath); $sourceWidth = imagesx($sourceImage); $sourceHeight = imagesy($sourceImage); $targetWidth = 200; // 目标宽度 $targetHeight = 200; // 目标高度 // 计算裁剪的起始坐标 $sourceRatio = $sourceWidth / $sourceHeight; $targetRatio = $targetWidth / $targetHeight; if ($sourceRatio > $targetRatio) { $croppedWidth = $sourceHeight * $targetRatio; $croppedHeight = $sourceHeight; $sourceX = ($sourceWidth - $croppedWidth) / 2; $sourceY = 0; } else { $croppedWidth = $sourceWidth; $croppedHeight = $sourceWidth / $targetRatio; $sourceX = 0; $sourceY = ($sourceHeight - $croppedHeight) / 2; } // 创建裁剪后的图像对象并保存 $targetImage = imagecreatetruecolor($targetWidth, $targetHeight); imagecopyresampled($targetImage, $sourceImage, 0, 0, $sourceX, $sourceY, $targetWidth, $targetHeight, $croppedWidth, $croppedHeight); imagejpeg($targetImage, $targetPath);
2. 等比例压缩或扩张图片:
$sourcePath = 'image.jpg'; // 原始图片路径 $targetPath = 'resized.jpg'; // 调整后保存的图片路径 $sourceImage = imagecreatefromjpeg($sourcePath); $sourceWidth = imagesx($sourceImage); $sourceHeight = imagesy($sourceImage); $targetWidth = 200; // 目标宽度 $targetHeight = 200; // 目标高度 $targetImage = imagecreatetruecolor($targetWidth, $targetHeight); imagecopyresampled($targetImage, $sourceImage, 0, 0, 0, 0, $targetWidth, $targetHeight, $sourceWidth, $sourceHeight); imagejpeg($targetImage, $targetPath);
在第一个示例代码中,我们根据目标尺寸和原始图片的宽高比来计算裁剪的起始坐标,然后使用imagecopyresampled函数将选定区域的原始图片调整为指定的目标尺寸,并存储为裁剪后的图片。在第二个示例中,我们直接使用imagecopyresampled函数将原始图片按照指定的目标尺寸进行等比例压缩或拉伸,保持宽高比,并存储为调整后的图片。
本文介绍的是PHP上传图片以及对上传的图片进行一些简单的判断或者处理,以满足网站需求后进行保存。当然在实际使用的时候,你还可能对图像文件的大小、几何尺寸、图片格式等进行相关判断和处理以后再进行使用!PHP也可以对图像进行查重处理,具体方法请浏览本人微信公众号‘文煞站长笔记网’的一篇名为《PHP如何判断两张图片是否一样?》的教程!
分享:
支付宝
微信