红穆笔记
首頁 語言筆記 PHP批量壓縮服務器裏面的圖片
語言筆記 PHP

PHP批量壓縮服務器裏面的圖片

PHP批量压缩服务器里面的图片

直接複製這一整段執行

cat > /www/wwwroot/blog2.1.4s5.cn/compress.php << 'EOF'
<?php
/**
 * WebP 圖片批量壓縮腳本
 */

// ---- 加大內存 ----
ini_set('memory_limit', '512M');
set_time_limit(0);

$dir     = '/www/wwwroot/blog2.1.4s5.cn/wp-content/uploads/titlepic';
$backup  = '/www/wwwroot/blog2.1.4s5.cn/wp-content/uploads/titlepic_bak';
$quality = 80;
$maxW    = 1000;

if (!function_exists('imagecreatefromwebp')) {
    die("❌ 當前 PHP 沒有 WebP 支持\n");
}

if (!is_dir($dir)) die("❌ 目錄不存在:$dir\n");

// ---- 備份 ----
if (!is_dir($backup)) {
    echo "📦 備份原圖到 $backup ...\n";
    exec("cp -r " . escapeshellarg($dir) . " " . escapeshellarg($backup));
    echo "✅ 備份完成\n\n";
}

$files = glob($dir . '/*.webp');
$total = count($files);

echo "🚀 開始壓縮(質量 " . $quality . ",最大寬度 " . $maxW . "px),共 " . $total . " 張\n\n";

$ok = 0;
$skip = 0;
$before = 0;
$after = 0;

foreach ($files as $i => $file) {
    $size1 = filesize($file);
    $before += $size1;

    $img = @imagecreatefromwebp($file);
    if (!$img) {
        $skip++;
        $after += $size1;
        continue;
    }

    $w = imagesx($img);
    $h = imagesy($img);

    // 縮放
    if ($w > $maxW) {
        $newW = $maxW;
        $newH = (int)round($h * ($maxW / $w));
        $newImg = imagecreatetruecolor($newW, $newH);
        imagealphablending($newImg, false);
        imagesavealpha($newImg, true);
        imagecopyresampled($newImg, $img, 0, 0, 0, 0, $newW, $newH, $w, $h);
        imagedestroy($img);
        $img = $newImg;
    }

    // 保存
    $tmpFile = $file . '.tmp';
    $saved = imagewebp($img, $tmpFile, $quality);
    imagedestroy($img);

    if (!$saved || !file_exists($tmpFile)) {
        $skip++;
        $after += $size1;
        @unlink($tmpFile);
        continue;
    }

    $size2 = filesize($tmpFile);

    if ($size2 < $size1) {
        rename($tmpFile, $file);
        $ok++;
        $after += $size2;

        if ($ok % 20 === 0) {
            echo "  已壓縮 " . $ok . " 張...\n";
        }
    } else {
        @unlink($tmpFile);
        $skip++;
        $after += $size1;
    }

    // 強制釋放
    gc_collect_cycles();
}

echo "\n";
echo "============================================\n";
echo "✅ 處理完成\n";
echo "============================================\n";
echo "總計:    " . $total . " 張\n";
echo "已壓縮:  " . $ok . " 張\n";
echo "跳過:    " . $skip . " 張\n";
echo "\n";
echo "壓縮前:  " . round($before / 1024 / 1024, 1) . " MB\n";
echo "壓縮後:  " . round($after / 1024 / 1024, 1) . " MB\n";

if ($before > $after) {
    $saved = $before - $after;
    $pct = round($saved * 100 / $before, 1);
    echo "節省:    " . round($saved / 1024 / 1024, 1) . " MB(約 " . $pct . "%)\n";
}

echo "\n💾 原圖備份:" . $backup . "\n";
echo "📝 滿意後可刪:rm -rf " . $backup . "\n";
EOF

php /www/wwwroot/blog2.1.4s5.cn/compress.php

預期輸出

🚀 開始壓縮(質量 80,最大寬度 1000px),共 202 張

  已壓縮 20 張...
  已壓縮 40 張...
  ...

============================================
✅ 處理完成
============================================
總計:    202 張
已壓縮:  202 張
跳過:    0 張

壓縮前:  111 MB
壓縮後:  12 MB
節省:    99 MB(約 89%)

檢查單張效果

ls -lh /www/wwwroot/blog2.1.4s5.cn/wp-content/uploads/titlepic/166.webp
微信赞赏

微信

支付宝赞赏

支付寶

✍️ 作者: 紅穆

網站管理員 · 感謝閱讀,更多精彩內容敬請關注

作者主頁 查看主頁 →

相關文章

PHP ob函数记录

PHP ob函數記錄 語言筆記 PHP

下面3個函數的用法 ob_get_contents(); ob_end_clean(); ob_start(); 可以藉助這幾個函數實現緩衝本地文件,以及執行本地腳本代碼。 使用ob_start()把輸出的代碼存到緩衝區,頁面不會顯示出來; 然後用ob_get_contents得到緩衝區的數據。 o…
👁 140
PHP preg

PHP preg 語言筆記 PHP

preg_match_all 函數用於執行一個全局正則表達式匹配。preg_match_all() 語法int preg_match_all ( string $pattern , string $subject [, array &amp;$matches [, int $flags = PREG…
👁 169
PHP 三元运算符与if的详解

PHP 三元運算符與if的詳解 語言筆記 PHP

三元運算符語條件 ? 結果1 : 結果2 說明:問號前面的位置是判斷的條件,如果滿足條件時結果1,不滿足時結果2。本文對三元運算符和if...else...進行對比詳解,希望對大家有所幫助。今天在改論文在線的時候遇到了一個語句看不懂:$if_summary = $row['IF_SUMMARY']=…
👁 188
PHP强制转换类型

PHP強制轉換類型 語言筆記 PHP PHP採集 PHP與mysql

獲取數據類型1.如果想查看某個表達式的值和類型,用var_dump()。 2.如果只是想得到一個易讀懂的類型的表達方式用於調試,用 gettype()。3.要查看某個類型,不要用 gettype(),而用is_type() 函數。字符串轉換爲數值當一個字符串被當作數字來求值時,根據以下規則來決定結果…
👁 232
php 字符串中是否包含指定字符串的多种方法

php 字符串中是否包含指定字符串的多種方法 語言筆記 PHP

strstrstrstr() 函數搜索一個字符串在另一個字符串中的第一次出現。該函數返回字符串的其餘部分(從匹配點)。如果未找到所搜索的字符串,則返回 false。代碼如下:&lt;?php $email = 'user@example.com'; $domain = strstr($email, …
👁 138

推薦閱讀

包装印刷打印设备类网站模板 0618

包裝印刷打印設備類網站模板 0618 實用收藏 易優模板

一款針對包裝、印刷與打印設備行業的eyoucms網站模板。設計風格專業實用,能夠展示印刷設備、包裝產品及工藝技術。有助於印刷包裝企業在線上展示實力,吸引品牌客戶。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易優CMS(Ey…
👁 38
(PC+WAP)营销型绿色市政园林绿化类pbootcms网站模板 园林建筑设计类网站源码 0105

(PC+WAP)營銷型綠色市政園林綠化類pbootcms網站模板 園林建築設計類網站源碼 0105 實用收藏 pbootcms模板

這款PbootCMS模板專注於營銷型市政園林綠化與園林建築設計行業,支持PC和WAP端訪問。設計風格自然大氣,能夠很好地展示景觀設計作品、綠化工程及植物配置。是園林景觀公司或市政工程企業樹立品牌形象與獲客的有力工具。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admi…
👁 46
php 将一个字符串分割为组成它的字符

php 將一個字符串分割爲組成它的字符 語言筆記 PHP

問: php裏如何將一個字符串分割爲組成它的字符?比如hello -&gt; [h, e, l, l, o] 以下有三種方法:這是需要被分割的字符串: $str = 'Hello小樣';字符串的長度:$len = mb_strlen($str, 'utf8');// 7第一種:$arr = str_…
👁 182
餐桌餐椅家具定制网站模板 0878

餐桌餐椅傢俱定製網站模板 0878 實用收藏 易優模板

一款針對餐桌、餐椅與傢俱定製行業的eyoucms網站模板。設計風格現代實用,能夠展示餐桌椅產品、定製服務及空間解決方案。有助於傢俱品牌在線上展示產品,吸引餐廳與企業客戶。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易優CM…
👁 40
(自适应手机端)广告品牌策划公司网站pbootcms模板 广告品牌策划设计公司网站源码下载 0345

(自適應手機端)廣告品牌策劃公司網站pbootcms模板 廣告品牌策劃設計公司網站源碼下載 0345 實用收藏 pbootcms模板

本套自適應手機端的廣告品牌策劃與設計公司PbootCMS網站模板。設計風格創意營銷,適合廣告公司、品牌策劃機構展示案例與創意能力。有助於廣告公司在線上吸引品牌客戶,拓展業務。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admin 解壓密碼:www.4s5.cn相關文章…
👁 62
可视化品牌创新设计网站模板 1118

可視化品牌創新設計網站模板 1118 實用收藏 易優模板

此套eyoucms模板爲可視化品牌創新設計網站,設計風格創意視覺,能夠很好地展示品牌設計作品、創新案例及設計理念。有助於品牌設計公司在線上展示專業實力,吸引企業客戶。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易優CMS(…
👁 34