Вы можете использовать PowerShell! Поскольку современные документы Office на самом деле представляют собой ZIP-файлы, содержащие в основном файлы XML, мы можем довольно легко ими манипулировать, не полагаясь на какие-либо компоненты 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, похоже, не заботится (протестировано в PowerPoint 2016 в Windows 10). Если вы хотите, чтобы он пытался работать со всеми типами изображений (я не проверял другие форматы), измените эту строку:
$zip.Entries | ? {$_.FullName -like 'ppt/media/*.png'} | % {
К этому:
$zip.Entries | ? {$_.FullName.StartsWith('ppt/media/')} | % {
Сохраните скрипт в виде файла .ps1
, например, pptxjpg.ps1
. Если вы этого еще не сделали, следуйте инструкциям в разделе «Включение сценариев» вики-тега PowerShell . Затем вы можете запустить его из командной строки PowerShell следующим образом:
.\pptxjpg.ps1 C:\path\to\presentation.pptx
Он принимает необязательный параметр, определяющий качество JPG, по умолчанию 50. Если вы хотите сэкономить еще больше места, вы можете указать меньшее значение, например, так:
.\pptxjpg.ps1 C:\path\to\presentation.pptx -Quality 20
Когда я протестировал эту последнюю команду, она уменьшила размер презентации, содержащей снимок экрана с высоким разрешением и диаграмму среднего размера, с 982 КБ до 253 КБ.