6

У меня есть большой файл PowerPoint со многими встроенными изображениями, некоторые из которых в формате JPEG, а некоторые в формате PNG. Чтобы сделать файл как можно меньше, я бы хотел, чтобы все изображения PNG были преобразованы в JPEG.

Это можно сделать, сохранив каждое изображение вручную, преобразовав его и повторно добавив в презентацию, но это займет много времени. Есть ли функциональность для пакетного преобразования в MS Powerpoint (2016) или какой-то другой способ для достижения этого более эффективно?


Добавлено: я понимаю, что изображения могут быть сжаты в PowerPoint, и я уже сделал это. Но это не так сильно уменьшает размер файла, как замена PNG на JPEG, так как PNG - это гораздо более крупные файлы - отсюда и вопрос.

2 ответа2

4

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

2

Если вы хотите свести к минимуму файл pptx, независимо от настройки форматов изображений, выберите изображение и в меню ленты выберите « Format и найдите кнопку « Compress Pictures . Снимите галочку Apply only to this picture чтобы применить ко всем картинкам.

Необязательно: установите переключатель на E-mail 96 ppi . Это снизит разрешение и, таким образом, создаст более легкий pptx. Установите флажок Delete cropped areas of pictures чтобы удалить неиспользуемые части, скрытые с помощью кнопки «Обрезать».

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .