Вы можете использовать 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 КБ.