Как преобразовать несколько встроенных PNG в JPEG в файле Powerpoint?

1435
Harry Vervet

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

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


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

6

2 ответа на вопрос

4
Ben N

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

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

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

Я знаю, что вы можете сжать фотографии, но я не об этом. Кроме того, использование этого метода, по-видимому, только сжимает все изображения с данным типом файла (то есть, кажется, что оно сжимает только JPEG-файлы, если вы не идете и не повторяете процесс в формате PNG). Изображения PNG по-прежнему намного больше, чем JPEG, поэтому я хочу заменить все PNG версиями JPEG, как указано в вопросе. Harry Vervet 8 лет назад 2
Во-первых, этот метод сжимает все картинки, а не так, как вы думаете. Здесь (http://i.imgur.com/GF9S9FA.png) я выполнил сжатие, выбрав изображение в формате JPEG, процесс также прошел вместе с изображением PNG. Однако, даже если вам удастся преобразовать PNG в JPEG, вы прекратите разрывать ссылку, которая запрашивает повторную вставку только что преобразованных изображений. Помните, что PNG (без потерь) всегда будет намного больше, чем JPEG (сжатие с потерями). Если этот ответ вас не устраивает, я его удалю. Sanny 8 лет назад 0
Этот метод сжимает изображение путем понижения разрешения и обрезки скрытой области. Формат изображения зарезервирован, поэтому независимо от оригинального формата он сохраняется. Yvon 6 лет назад 2