如何将 Powerpoint 文件中嵌入的多个 PNG 转换为 JPEG?

如何将 Powerpoint 文件中嵌入的多个 PNG 转换为 JPEG?

我有一个很大的 PowerPoint 文件,里面嵌入了许多图像,其中一些是 JPEG,一些是 PNG。为了使文件尽可能小,我希望将所有 PNG 图像转换为 JPEG。

可以通过手动保存每张图片、转换图片并将其重新添加到演示文稿中来完成此操作,但这需要花费大量时间。MS Powerpoint (2016) 中是否有批量转换功能,或者是否有其他方法可以更有效地实现此操作?


补充:我意识到可以在 PowerPoint 中压缩图像,我已经这样做了。但这并不能像用 JPEG 替换 PNG 那样减少文件大小,因为 PNG 的文件要大得多——因此才有这个问题。

答案1

您可以使用 PowerShell!由于现代 Office 文档实际上是包含大部分 XML 文件的 ZIP 文件,因此我们可以相当轻松地操作它们,而无需依赖任何 Office 组件。我为您编写了这个脚本:

[CmdletBinding()]
Param(
    [Parameter(Mandatory = $true)][string]$File,
    [Parameter()][int]$Quality = 50
)
Add-Type -AssemblyName System.IO.Compression
Add-Type -AssemblyName System.Drawing
$fs = New-Object System.IO.FileStream (Resolve-Path $File), 'Open'
$zip = New-Object System.IO.Compression.ZipArchive $fs, 'Update'
$zip.Entries | ? {$_.FullName -like 'ppt/media/*.png'} | % {
    $s = $_.Open()
    $img = [System.Drawing.Image]::FromStream($s)
    $s.Position = 0
    $codec = [System.Drawing.Imaging.ImageCodecInfo]::GetImageDecoders() | ? {$_.FormatId -eq [System.Drawing.Imaging.ImageFormat]::Jpeg.Guid}
    $qualityprop = [System.Drawing.Imaging.Encoder]::Quality
    $encodeparams = New-Object System.Drawing.Imaging.EncoderParameters 1
    $encodeparams.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter $qualityprop, $Quality
    $img.Save($s, $codec, $encodeparams)
    $s.SetLength($s.Position)
    $s.Close()
}
$zip.Dispose()

它将给定的 PPTX 文件作为 ZIP 存档打开,查找每个嵌入的 PNG 图像,并将该图像转换为 JPG。它不会更新存档中文件的扩展名,但 PowerPoint 似乎并不关心(在 Windows 10 上的 PowerPoint 2016 上测试)。如果您希望它尝试处理所有图像类型(我尚未测试其他格式),请更改此行:

$zip.Entries | ? {$_.FullName -like 'ppt/media/*.png'} | % {

对此:

$zip.Entries | ? {$_.FullName.StartsWith('ppt/media/')} | % {

将脚本另存为.ps1文件,例如pptxjpg.ps1。如果尚未保存,请按照启用脚本部分中的说明进行操作PowerShell 标签 wiki。然后您可以从 PowerShell 提示符运行它,如下所示:

.\pptxjpg.ps1 C:\path\to\presentation.pptx

它采用一个可选参数来指定 JPG 质量,默认为 50。如果您想节省更多空间,可以指定一个较低的值,如下所示:

.\pptxjpg.ps1 C:\path\to\presentation.pptx -Quality 20

当我测试后一个命令时,它将包含高分辨率屏幕截图和中等尺寸图表的演示文稿的大小从 982 KB 缩小到了 253 KB。

答案2

如果你有 Python,你可以使用我编写的这个脚本:

https://github.com/slhck/compress-pptx

您只需要安装 ImageMagick(例如apt install imagemagick)。

然后,只需安装它并将其指向您的文件:

pip3 install --user compress-pptx
compress-pptx /path/to/file.pptx

它将转换所有大于 1 MiB 的嵌入 PNG 和 TIFF 图像,并将它们压缩为有损 JPEG。请注意,这会跳过具有透明度的图像。请参阅了解-h更多选项,并运行它以-v获取有关压缩结果的更多信息。

答案3

如果您希望最小化 pptx 文件,无论设置图像格式如何,请选择一张图片,然后从功能区菜单中选择Format并找到按钮Compress Pictures。取消勾选Apply only to this picture以应用于所有图片。

可选:将单选按钮设置为E-mail 96 ppi。这将降低分辨率,从而创建更浅的 pptx。勾选Delete cropped areas of pictures以丢弃使用裁剪按钮隐藏的未使用部分。

相关内容