Вопрос или проблема
У меня есть большой файл PowerPoint с множеством встроенных изображений, некоторые из которых являются JPEG, а некоторые – PNG. Чтобы сделать файл как можно меньше, я хотел бы, чтобы все изображения PNG были конвертированы в JPEG.
Это можно сделать, вручную сохранив каждое изображение, конвертировав его и повторно добавив в презентацию, но на это уходит много времени. Существует ли возможность выполнить пакетное конвертирование в MS PowerPoint (2016) или какой-либо другой метод, чтобы достичь этого более эффективно?
Добавлено: Я понимаю, что изображения можно сжимать в PowerPoint, и я уже это сделал. Но это не сокращает размер файла так сильно, как замена PNG на JPEG, поскольку файлы PNG гораздо больше – отсюда и вопрос.
Вы можете использовать PowerShell! Поскольку современные офисные документы на самом деле являются 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 КБ.
Если у вас есть Python, вы можете использовать этот скрипт, который я написал:
https://github.com/slhck/compress-pptx
Все, что вам нужно, это установленный ImageMagick (например, apt install imagemagick
).
Затем просто установите его и укажите ваш файл:
pip3 install --user compress-pptx
compress-pptx /path/to/file.pptx
Он конвертирует все встроенные изображения PNG и TIFF, которые превышают 1 МиБ, сжимая их в сжатые JPEG. Обратите внимание, что это пропускает изображения с прозрачностью. Смотрите -h
для получения дополнительных параметров и запустите его с -v
, чтобы получить больше информации о результатах сжатия.
Если вы стремитесь минимизировать файл pptx, независимо от форматов изображений, выберите картинку и в верхнем меню выберите Формат
, затем найдите кнопку Сжать изображения
. Уберите галочку с Применить только к этой картинке
, чтобы применить ко всем картинкам.
Опционально: установите переключатель на Электронная почта 96 ppi
. Это снизит разрешение и тем самым создаст более легкий pptx. Установите галочку на Удалить обрезанные области изображений
, чтобы избавиться от неиспользуемых частей, скрытых кнопкой Обрезать.
Возможно, для вас важнее получить маленький файл, чем сохранить его в формате pptx, например, чтобы поделиться черновиком. Если это так,
- Экспортировать как PDF и
- Оптимизировать для “лучшее для электронной рассылки” в диалоговом окне сохранения ниже имени файла.
Мне удалось уменьшить файл pptx с 42 МБ до 5 МБ в формате PDF.
Ответ или решение
Как конвертировать несколько встраиваемых PNG в JPEG в файле PowerPoint
Если вы столкнулись с задачей уменьшения размера файла PowerPoint, заменив встраиваемые PNG изображения на JPEG, существует несколько эффективных способов решения данной проблемы. Особое внимание следует уделить тому, что свойства и инструменты PowerPoint не всегда могут выполнить эту задачу автоматически, особенно если в документе много изображений. В данной статье мы рассмотрим несколько подходов к решению задачи.
1. Использование PowerShell
Если у вас установлен Windows и вы знакомы с PowerShell, то вы можете использовать следующий скрипт для замены PNG на JPEG сразу для нескольких изображений в файле PPTX:
[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. Вы можете сохранить скрипт как файл .ps1
, например pptxjpg.ps1
, и затем запустить его из PowerShell командной строки, указав путь к вашему файлу PPTX.
Несмотря на то, что PowerPoint не требует обновления расширений файлов в архиве, данный метод позволяет эффективно преобразовать изображения и уменьшить размер файла. Обратите внимание, что опционально можно указать параметр -Quality
, чтобы увеличить или уменьшить качество выходного изображения, что также влияет на размер файла.
2. Использование Python и ImageMagick
Если вам удобнее использовать Python, вы можете воспользоваться библиотекой compress-pptx
, которая также позволяет конвертировать PNG в JPEG. Убедитесь, что у вас установлен ImageMagick. Выполните следующие команды:
pip3 install --user compress-pptx
compress-pptx /path/to/file.pptx
Эта библиотека автоматически конвертирует все встраиваемые PNG и TIFF изображения, размеры которых превышают 1 МБ, в lossy JPEG. Также учтите, что изображения с прозрачностью будут пропущены.
3. Сжатие изображений в PowerPoint
Если вы не хотите использовать скрипты, вы можете воспользоваться встроенной функциональностью PowerPoint для сжатия изображений. Выберите любое изображение, перейдите на вкладку «Формат» и нажмите кнопку «Сжать изображения». Убедитесь, что отключена опция «Применить только к этому изображению», чтобы изменения были применены ко всем изображениям в презентации.
Рекомендуется выбрать опцию «Электронная почта (96 ppi)», чтобы понизить разрешение изображений, что также снижает размер файла. Также можно отметить «Удалить обрезанные области изображений», чтобы избавиться от ненужных частей.
4. Экспорт в PDF
Если минимизация размера файла является вашим приоритетом, независимо от формата, вы можете рассмотреть возможность экспорта презентации в PDF. При этом выберите опцию «Оптимизировать для электронной рассылки». В результате получится файл значительно меньшего размера, что облегчает его обмен и хранение.
Заключение
Выбор метода зависит от ваших предпочтений и технических возможностей. PowerShell и Python позволяют автоматизировать процесс и значительно сэкономить время, в то время как встроенные инструменты PowerPoint могут быть более удобными для менее опытных пользователей. Важно помнить, что при работе с изображениями всегда следует заботиться о сохранении их качества, чтобы контент оставался привлекательным и целостным вне зависимости от изменения форматов.