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

相关文章

  • 图片压缩上传

    参考1-HTML5实现图片压缩上传功能参考2-移动前端—图片压缩上传实践参考3-移动端H5图片压缩上传 大体步骤 ...

  • 二十、PHP图片上传

    index.php Ajax+PHP实现异步图片上传

  • Jquery图片转成base64

    可以实现图片预览上传,不用flash方法 php接收保存图片方法

  • iOS 网络上传图片

    上传图片 构造参数(NSArray *)files 上传图片—压缩 压缩到小于(...

  • iPic for Mac(图床神器) v1.7.0中文免费版

    上传图片相关设置 上传前压缩图片 可以在 iPic 的 偏好设置 中开启「上传前压缩图片」选项,目前支持压缩的图片...

  • 移动端图片压缩上传

    [2017年文章] 前提更要:1、压缩图片的几种方式:php、js2、对移动端手机上传的图片进行压缩,lrz的原理...

  • Canvas 实现图片上传压缩

    背景 收集用户上传的图片是一件很常见的需求,然而随着现在设备像素越来越高,照片尺寸通常也越来越大。因此,在前端对用...

  • Canvas实现图片压缩上传

    接到产品需求,问能不能将前端上传的图片压缩?像移动端上传图片,一般都是超清、高清图片,大小也有10M,甚至一张图片...

  • php实现图片上传并等比例压缩

    分为两个文件,采用原始php简单粗暴的说明用法 shenshu.php 接收2个GET参数orderid,acco...

  • 移动端图片压缩上传实现

    移动端图片压缩上传实现 移动端上传的图片一般都是手机照片,现在的手机都是高清像素,一张图片都在三四兆,直接上传不仅...

网友评论

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

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