美文网首页
php实现图片压缩上传

php实现图片压缩上传

作者: 知码客 | 来源:发表于2024-04-16 00:10 被阅读0次

    在PHP中实现图片压缩上传通常涉及几个步骤:接收上传的文件、处理图片(如压缩、调整大小等)、保存处理后的图片到服务器。以下是一个简单的示例,展示如何使用PHP GD库来压缩并上传图片:

    <?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['image'])) {
        $targetDir = 'uploads/'; // 图片上传目录
        $targetFile = $targetDir . basename($_FILES['image']['name']);
        $imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
        $maxSize = 1000000; // 限制文件大小,例如1MB
        $uploadOk = 1;
        $imageQuality = 70; // 压缩质量,范围从0(最差质量,文件最小)到100(最佳质量,文件最大)
    
        // 检查文件大小
        if ($_FILES['image']['size'] > $maxSize) {
            echo "对不起,您的文件过大。";
            $uploadOk = 0;
        }
    
        // 允许某些文件格式
        $allowedTypes = array('jpg', 'jpeg', 'png', 'gif');
        if (!in_array($imageFileType, $allowedTypes)) {
            echo "对不起,只接受 JPG, JPEG, PNG & GIF 文件。";
            $uploadOk = 0;
        }
    
        // 检查文件是否已经存在
        if (file_exists($targetFile)) {
            echo "对不起,文件已存在。";
            $uploadOk = 0;
        }
    
        // 检查 $uploadOk 是否为0,如果没有则尝试上传文件
        if ($uploadOk == 0) {
            echo "对不起,您的文件上传失败。";
        } else {
            if (move_uploaded_file($_FILES['image']['tmp_name'], $targetFile)) {
                echo "文件 ". basename( $_FILES['image']['name']). " 已经上传。";
    
                // 压缩图片
                $sourceImage = imagecreatefromstring(file_get_contents($targetFile));
                $targetImage = imagecreatetruecolor(imagesx($sourceImage), imagesy($sourceImage));
    
                imagecopy($targetImage, $sourceImage, 0, 0, 0, 0, imagesx($sourceImage), imagesy($sourceImage));
    
                // 使用imagejpeg, imagepng或imagegif保存压缩后的图片,取决于原始图片格式
                switch ($imageFileType) {
                    case 'jpg':
                    case 'jpeg':
                        imagejpeg($targetImage, $targetFile, $imageQuality);
                        break;
                    case 'png':
                        imagepng($targetImage, $targetFile, $imageQuality / 10); // 注意:PNG使用不同的质量范围
                        break;
                    case 'gif':
                        imagegif($targetImage, $targetFile);
                        break;
                    default:
                        echo '不支持的图片格式';
                        break;
                }
    
                // 释放内存
                imagedestroy($sourceImage);
                imagedestroy($targetImage);
    
            } else {
                echo "对不起,上传您的文件时出现了错误。";
            }
        }
    }
    ?>
    
    <!-- HTML表单用于上传图片 -->
    <form action="" method="post" enctype="multipart/form-data">
        选择图片上传:
        <input type="file" name="image" id="image">
        <input type="submit" value="上传图片" name="submit">
    </form>
    

    请注意,上面的代码示例中的$targetDir变量应该指向一个服务器上存在的、可写的目录,用于保存上传的图片。

    代码首先检查上传的文件大小是否超过限制,然后检查文件类型是否允许,接着检查文件是否已经存在。如果所有检查都通过,代码将尝试将文件移动到目标目录。然后,它使用GD库来创建图片资源,并复制原始图片的内容到一个新的图片资源中。之后,根据原始图片的文件类型,使用相应的函数(imagejpeg, imagepng, imagegif)保存压缩后的图片。最后,释放用于处理图片的内存。

    请注意,使用GD库进行图片压缩可能会导致图片质量的损失,尤其是当压缩质量设置得较低时。此外,这个示例没有包括错误处理和安全性检查(如检查上传文件的内容是否真的是图片),这在实际应用中是非常重要的。在生产环境中,务必增加这些额外的检查以确保系统的健壮性和安全性。

    相关文章

      网友评论

          本文标题:php实现图片压缩上传

          本文链接:https://www.haomeiwen.com/subject/ltkjxjtx.html