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

Har*_*vet 6 image-conversion microsoft-powerpoint

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

这可以通过手动保存每个图像、转换它并将其重新添加到演示文稿中来完成,但这需要很多时间。是否有在 MS Powerpoint (2016) 中进行批量转换的功能,或者更有效地实现这一目标的其他方法?


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

Ben*_*n N 5

您可以使用 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()
Run Code Online (Sandbox Code Playgroud)

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

$zip.Entries | ? {$_.FullName -like 'ppt/media/*.png'} | % {
Run Code Online (Sandbox Code Playgroud)

对此:

$zip.Entries | ? {$_.FullName.StartsWith('ppt/media/')} | % {
Run Code Online (Sandbox Code Playgroud)

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

.\pptxjpg.ps1 C:\path\to\presentation.pptx
Run Code Online (Sandbox Code Playgroud)

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

.\pptxjpg.ps1 C:\path\to\presentation.pptx -Quality 20
Run Code Online (Sandbox Code Playgroud)

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


San*_*nny 0

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

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

  • 该方法通过降低分辨率和裁剪隐藏区域来压缩图片。图像格式是保留的,所以无论原始格式是什么,它都会被保留。 (3认同)
  • 我知道你可以压缩图片,但这不是我要的。此外,使用此方法似乎仅压缩给定文件类型的所有图片(即,它似乎仅压缩 JPEG,除非您对 PNG 重复该过程)。 PNG 图像仍然比 JPEG 大得多,因此我想将所有 PNG 替换为问题中所述的 JPEG 版本。 (2认同)