NNMHUB
🪶

批量图片压缩

免费在线

用系统自带库批量压缩 jpg/png/bmp 图片,输出到「压缩后」文件夹。

Windows图片压缩

🪶Windows 本地工具 · 使用介绍

使用介绍

用途:把文件夹里的 jpg/png/bmp 图片批量压缩为 jpg(可调质量),适合给图片减体积、准备上传素材。

使用步骤:

1.下载脚本,双击 `run.bat` 运行

2.输入图片目录,设置压缩质量(默认 75,越小文件越小)

3.完成后在「压缩后」子文件夹取结果

说明:使用 Windows 自带的 .NET 图形库,无需安装任何软件;原图不被覆盖。透明 PNG 会以白底转成 jpg。

下载脚本 (.ps1) 双击启动器 (.bat)建议两个都下载,放到同一文件夹

脚本为纯文本(PowerShell),可先用记事本打开查看源码再运行;仅在本机执行,不会上传任何数据。 首次运行如被系统拦截,右键脚本 → 属性 → 解除锁定,或用启动器(已带 ExecutionPolicy Bypass)运行。

脚本源码预览(可复制)

# ==================================================
# 批量图片压缩(NMHUB 牛马工具)
# 使用系统自带 .NET 图形库,把 jpg/png/bmp 批量压缩为 jpg
# 输出到「压缩后」子文件夹,不覆盖原图
# ==================================================
$ErrorActionPreference = "Continue"

Write-Host ""
Write-Host "========== 批量图片压缩 ==========" -ForegroundColor Cyan

$dir = Read-Host "请输入图片所在目录(回车 = 当前目录)"
if (-not $dir) { $dir = (Get-Location).Path }
if (-not (Test-Path -LiteralPath $dir)) {
    Write-Host "路径不存在。" -ForegroundColor Red
    Read-Host "按回车退出"; exit 1
}

$quality = Read-Host "压缩质量(50-95,默认 75,越小文件越小)"
if (-not $quality) { $quality = 75 }
$quality = [Math]::Max(30, [Math]::Min(95, [int]$quality))

Add-Type -AssemblyName System.Drawing

$outDir = Join-Path $dir "压缩后"
New-Item -ItemType Directory -Path $outDir -Force | Out-Null

$images = Get-ChildItem -LiteralPath $dir -File | Where-Object { $_.Extension -in ".jpg", ".jpeg", ".png", ".bmp" }
if ($images.Count -eq 0) { Write-Host "没有找到 jpg/png/bmp 图片。" -ForegroundColor Yellow; Read-Host "按回车退出"; exit }
Write-Host "共 $($images.Count) 张图片,输出到「压缩后」文件夹…"

$encoderParams = New-Object System.Drawing.Imaging.EncoderParameters(1)
$encoderParams.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter(
    [System.Drawing.Imaging.Encoder]::Quality, [long]$quality)
$jpgCodec = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() |
    Where-Object { $_.MimeType -eq "image/jpeg" } | Select-Object -First 1

$done = 0
foreach ($img in $images) {
    try {
        $src = [System.Drawing.Image]::FromFile($img.FullName)
        $target = Join-Path $outDir ($img.BaseName + ".jpg")
        $src.Save($target, $jpgCodec, $encoderParams)
        $src.Dispose()
        $done++
    } catch {
        Write-Host "失败: $($img.Name)" -ForegroundColor Red
    }
}
Write-Host ""
Write-Host "完成,压缩 $done / $($images.Count) 张,输出目录: $outDir" -ForegroundColor Green
Read-Host "按回车退出"