图片上传

1. 创建表单

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

2. PHP处理上传

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['image'])) {
    $image = $_FILES['image'];
    $uploadPath = 'uploads/';

    // 确保上传的文件是图片
    if (getimagesize($image['tmp_name']) !== false) {
        // 重命名上传的文件
        $newFileName = uniqid() . '.' . pathinfo($image['name'], PATHINFO_EXTENSION);
        $destination = $uploadPath . $newFileName;

        // 移动上传的文件到指定目录
        if (move_uploaded_file($image['tmp_name'], $destination)) {
            echo "图片上传成功!";
        } else {
            echo "图片上传失败。";
        }
    } else {
        echo "上传的文件不是图片。";
    }
}
?>

3. 设置上传目录权限

确保上传目录(例如 uploads/)具有正确的权限,以便PHP可以写入文件。

chmod 755 uploads/

图片智能压缩

1. 使用GD库进行压缩

<?php
// 获取上传图片的信息
$image = imagecreatefromjpeg('uploads/image.jpg');
$width = imagesx($image);
$height = imagesy($image);

// 设置压缩后的图片尺寸
$newWidth = 800;
$newHeight = ($height * $newWidth) / $width;

// 创建一个新的图片资源
$imageResized = imagecreatetruecolor($newWidth, $newHeight);

// 复制并调整图片大小
imagecopyresampled($imageResized, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

// 输出压缩后的图片
imagejpeg($imageResized, 'uploads/compressed_image.jpg');

// 释放内存
imagedestroy($image);
imagedestroy($imageResized);
?>

2. 使用第三方库

如果您需要更高级的压缩功能,可以考虑使用第三方库,如Imagick或Gmagick。以下是一个使用Imagick的示例:

<?php
// 载入图片
$image = new Imagick('uploads/image.jpg');

// 设置压缩比例
$image->setImageCompression(Imagick::COMPRESSION_JPEG);
$image->setImageCompressionQuality(75);

// 重命名图片
$image->setImageFilename('uploads/compressed_image.jpg');

// 保存图片
$image->writeImage();

// 释放资源
$image->clear();
$image->destroy();
?>

总结