windows系统中可利用自带“照片”应用、“画图”工具及powershell脚本批量压缩照片:一、照片应用通过“调整图像大小”生成压缩副本;二、画图以40–60质量重存jpeg;三、powershell调用system.drawing实现75%质量批量编码并剥离元数据。

如果您在 Windows 系统中需要批量减小照片文件体积,但不希望安装第三方软件,则可优先使用系统自带的“照片”应用与“画图”工具组合实现基础压缩。以下是具体操作步骤:
一、使用 Windows 照片应用批量导出压缩版
Windows 照片应用虽不提供直接的“批量压缩”界面,但支持对单张或多张图片进行“另存为”时自动降低质量,配合资源管理器多选操作可实现准批量处理。该方法无需额外安装,适用于 JPEG 格式为主的照片集合。
1、在文件资源管理器中按住 Ctrl 键并逐个点击 选择需处理的多张照片(建议同目录下操作)。
2、右键任意一张选中照片,选择“打开方式” → “照片”。
3、在照片应用中,点击右上角“⋯”按钮,选择“编辑并创建” → “调整图像大小”。
4、滑动“大小”滑块至左侧(如“小”或“中”),此时预览图下方会显示预计文件大小变化。
5、点击“保存副本”,系统将为每张选中照片生成一个压缩后的新文件,原始文件保持不变。
二、利用画图工具批量重存降质
画图(Paint)是 Windows 自带轻量级图像编辑器,支持以不同质量参数重新保存 JPEG 文件,通过快速重存可显著减小体积,尤其适合对画质容忍度较高的场景。此法操作简单,且能绕过照片应用的单次限制。
1、在文件资源管理器中选中一张照片,右键 → “打开方式” → “画图”。
在 Windows 上执行终端命令,或对比 Windows 与 Linux 的 Shell 语法时使用。建议先检测当前 Shell 是 PowerShell 还是 cmd.exe,再给出相应命令……
2、在画图窗口中,点击左上角“文件” → “另存为” → “JPEG 图像”。
3、在保存对话框中,**不修改文件名**,仅点击“保存”按钮旁的小箭头,选择“压缩品质”滑块,拖动至 40–60 区间 后确认保存。
4、重复步骤 1–3 对其余照片依次操作;若需提升效率,可配合键盘快捷键:Ctrl + O(打开)、Ctrl + Shift + S(另存为 JPEG)、Alt + Q(调出品质滑块)。
三、通过 PowerShell 脚本调用系统编码器无损缩略
PowerShell 可调用 Windows 内置的 Windows Imaging Component(WIC)接口,对 JPEG/PNG 图片执行无损元数据剥离与有损质量重编码,全程不依赖 GUI,支持真正意义上的后台批量处理。该方法保留图像视觉质量的同时有效削减体积,特别适合含大量 EXIF 信息的照片。
1、在照片所在文件夹空白处按住 Shift + 右键,选择“在此处打开 PowerShell 窗口”。
2、粘贴以下命令并回车执行(默认将所有 .jpg/.jpeg 文件压缩为 75% 质量,输出至 _compressed 子文件夹):
Get-ChildItem *.jpg, *.jpeg | ForEach-Object { magick $_.FullName -quality 75 -strip "$($_.DirectoryName)\_compressed\$($_.Name)" }
3、若提示“magick 命令未识别”,说明未安装 ImageMagick;此时改用纯系统方案:运行以下 PowerShell 命令(需 Windows 10 1809+ 或 Windows 11):
Add-Type -AssemblyName System.Drawing; Get-ChildItem *.jpg | ForEach-Object { $img = [System.Drawing.Image]::FromFile($_.FullName); $codec = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() | Where-Object {$_.MimeType -eq 'image/jpeg'}; $ep = New-Object System.Drawing.Imaging.EncoderParameter ([System.Drawing.Imaging.Encoder]::Quality, 75L); $epc = New-Object System.Drawing.Imaging.EncoderParameters(1); $epc.Param[0] = $ep; $outPath = Join-Path $_.Directory "_compressed" $_.Name; if (-not (Test-Path (Split-Path $outPath))) { New-Item (Split-Path $outPath) -ItemType Directory -Force > $null }; $img.Save($outPath, $codec, $epc); $img.Dispose() }










