一、图片上传
1.1 前端准备
首先,我们需要在前端页面提供一个文件上传的表单。以下是一个简单的HTML代码示例:
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit" value="上传" />
</form>
1.2 后端处理
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_FILES['image'])) {
$file = $_FILES['image'];
$upload_dir = 'uploads/';
$file_name = basename($file['name']);
$file_tmp_name = $file['tmp_name'];
$file_size = $file['size'];
$file_error = $file['error'];
$file_ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
$allowed_ext = array('jpg', 'jpeg', 'png', 'gif');
if (in_array($file_ext, $allowed_ext) && $file_error === 0) {
$file_name_new = uniqid('', true) . '.' . $file_ext;
move_uploaded_file($file_tmp_name, $upload_dir . $file_name_new);
echo "上传成功!";
} else {
echo "上传失败:不支持该文件格式或文件有误。";
}
}
}
?>
二、图片智能压缩
2.1 压缩算法
- JPEG:使用imagejpeg()函数进行压缩。
- PNG:使用imagepng()函数进行压缩。
- GIF:使用imagegif()函数进行压缩。
2.2 压缩参数
<?php
$image_path = 'uploads/image.jpg';
$image_quality = 75; // 图片质量,取值范围为0-100
$image = imagecreatefromjpeg($image_path);
$image_compressed = imagejpeg($image, $image_path, $image_quality);
if ($image_compressed) {
echo "压缩成功!";
} else {
echo "压缩失败!";
}
imagedestroy($image);
?>
2.3 智能压缩
<?php
$image_path = 'uploads/image.jpg';
$max_size = 500000; // 最大文件大小(单位:字节)
$image_quality = 90; // 默认图片质量
$image = getimagesize($image_path);
$image_size = $image[0] * $image[1] * 3; // 计算图片大小(单位:字节)
if ($image_size > $max_size) {
$image_quality = ceil((100 * $max_size) / $image_size);
$image = imagecreatefromjpeg($image_path);
$image_compressed = imagejpeg($image, $image_path, $image_quality);
if ($image_compressed) {
echo "压缩成功!";
} else {
echo "压缩失败!";
}
} else {
echo "图片大小符合要求,无需压缩。";
}
imagedestroy($image);
?>