引言

图片上传

1. 环境准备

在开始之前,请确保您的服务器已安装PHP和GD库,GD库是处理图像的扩展库。

2. HTML表单

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="image" />
    <input type="submit" value="上传" />
</form>

3. PHP处理

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $target_dir = "uploads/";
    $target_file = $target_dir . basename($_FILES["image"]["name"]);
    $uploadOk = 1;
    $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

    // 检查文件是否已存在
    if (file_exists($target_file)) {
        echo "文件已存在。";
        $uploadOk = 0;
    }

    // 检查文件大小
    if ($_FILES["image"]["size"] > 5000000) {
        echo "文件太大,请上传小于5MB的文件。";
        $uploadOk = 0;
    }

    // 允许特定格式的文件
    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
    && $imageFileType != "gif" ) {
        echo "对不起,只能上传 JPG, JPEG, PNG & GIF 文件。";
        $uploadOk = 0;
    }

    // 检查是否上传成功
    if ($uploadOk == 1) {
        if (move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
            echo "文件 ". htmlspecialchars( basename( $_FILES["image"]["name"])). " 已上传。";
        } else {
            echo "上传失败。";
        }
    }
}
?>

图片压缩

1. 使用GD库

PHP的GD库提供了多种图像处理函数,包括压缩。

function compressImage($source, $destination, $quality) {
    list($width, $height) = getimagesize($source);
    $image = imagecreatefromjpeg($source);
    imagejpeg($image, $destination, $quality);
    imagedestroy($image);
}

// 压缩图片
compressImage('uploads/image.jpg', 'uploads/compressed.jpg', 75);

2. 使用第三方库

如果您需要更高级的图像处理功能,可以考虑使用第三方库,如Imagick。

<?php
// 使用Imagick库
$imagick = new Imagick('uploads/image.jpg');
$imagick->setImageCompression(Imagick::COMPRESSION_JPEG);
$imagick->setImageCompressionQuality(75);
$imagick->resizeImage(800, null, Imagick::FILTER_LANCZOS, 1);
$imagick->writeImage('uploads/compressed.jpg');
$imagick->clear();
$imagick->destroy();
?>

总结