直接複製這一整段執行
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