首頁 > php代码 > 宽度和高度不变,图片大小变小,判断小于800k的图片不压缩

宽度和高度不变,图片大小变小,判断小于800k的图片不压缩

以下是修改后的 PHP 函数,它会先检查图片的大小,如果小于 800K 则不进行压缩操作,否则会按照之前的逻辑进行压缩:
```php
<?php
function reduceImageSize($sourcePath, $quality = 70) {
    // 获取文件大小,单位为字节
    $fileSize = filesize($sourcePath);
    // 将文件大小转换为千字节(KB)
    $fileSizeInKB = $fileSize / 1024;
    
    if ($fileSizeInKB < 800) {
        return;
    }
    
    $imageInfo = getimagesize($sourcePath);
    $imageType = $imageInfo[2];
    $originalImage = null;

    switch ($imageType) {
        case IMAGETYPE_JPEG:
            $originalImage = imagecreatefromjpeg($sourcePath);
            imagejpeg($originalImage, $sourcePath, $quality);
            break;
        case IMAGETYPE_PNG:
            $originalImage = imagecreatefrompng($sourcePath);
            // 使用 imagepng 函数并设置压缩级别,9 是最高压缩级别(无损)
            imagepng($originalImage, $sourcePath, 9);
            break;
        case IMAGETYPE_GIF:
            // 对于 GIF 图片,暂时不进行优化,因为 GIF 的压缩比较复杂,可能涉及到帧的处理
            $originalImage = imagecreatefromgif($sourcePath);
            imagegif($originalImage, $sourcePath);
            break;
        default:
            throw new Exception('Unsupported image type.');
    }

    imagedestroy($originalImage);
}

// 调用示例,将 'path/to/your/image.jpg' 替换为实际的图片路径
try {
    reduceImageSize('path/to/your/image.jpg');
} catch (Exception $e) {
    echo $e->getMessage();
}
?>
```
**代码解释**:
- `reduceImageSize` 函数接收两个参数:
    - `$sourcePath`:源图片的完整路径。
    - `$quality`:对于 JPEG 图片,设置图片质量,范围从 0(低质量)到 100(高质量),默认为 70。
- 首先,使用 `filesize` 函数获取文件的大小(以字节为单位),并将其转换为千字节(KB)。
- 通过 `if ($fileSizeInKB < 800)` 来判断文件大小是否小于 800KB,如果小于则直接返回,不进行后续的压缩操作。
- 如果文件大小大于或等于 800KB,则继续进行以下操作:
    - 使用 `getimagesize` 函数获取图片的信息,主要是获取图片的类型。
    - 根据图片类型创建相应的原始图片资源:
        - 对于 JPEG 图片,使用 `imagecreatefromjpeg` 创建原始图片资源,然后使用 `imagejpeg` 函数将其重新保存,同时设置压缩质量为 `$quality`,通过调整 `$quality` 可以改变 JPEG 图片的文件大小。
        - 对于 PNG 图片,使用 `imagecreatefrompng` 创建原始图片资源,使用 `imagepng` 函数将其重新保存,并设置压缩级别为 9,这是最高的无损压缩级别。
        - 对于 GIF 图片,使用 `imagecreatefromgif` 创建原始图片资源并使用 `imagegif` 函数将其重新保存,暂时不进行特殊的优化,因为 GIF 图片的优化可能涉及到对帧的处理,会比较复杂。
    - 最后使用 `imagedestroy` 函数释放原始图片资源,释放内存。


**使用说明**:
1. 将上述代码保存为一个 PHP 文件,例如 `reduce_image_size.php`。
2. 把 `path/to/your/image.jpg` 替换为你想要压缩的实际图片的完整路径。
3. 在服务器上运行这个 PHP 文件,确保 PHP 的 `GD` 扩展已启用,因为代码中使用的 `imagecreatefromjpeg`、`imagecreatefrompng`、`imagecreatefromgif` 等函数是 `GD` 扩展提供的。
4. 运行文件后,如果出现异常,会输出相应的错误信息,如不支持的图片类型等。


请确保在运行代码前,服务器上的 PHP 环境已正确安装并启用 `GD` 扩展。如果没有启用,可以在 `php.ini` 文件中找到 `extension=gd` 这一行,并确保其未被注释掉(即去掉行首的 `;`),然后重启服务器。

这个方法在进行压缩操作前先检查文件大小,对于小于 800KB 的图片,避免了不必要的压缩操作,而对于大于或等于 800KB 的图片,会根据图片类型进行相应的压缩操作,旨在优化图片文件大小的同时,提高代码的执行效率。

相关资讯
最新资讯
IT兄弟 IT兄弟-是一家分享开发中常遇到的技术问题解决方案,也是站长们记录技术分享文章的平台。 琼ICP备2022012332号