直接复制这一整段执行
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