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

Вопрос или проблема

У меня есть большой файл 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 могут быть более удобными для менее опытных пользователей. Важно помнить, что при работе с изображениями всегда следует заботиться о сохранении их качества, чтобы контент оставался привлекательным и целостным вне зависимости от изменения форматов.

Оцените материал
Добавить комментарий

Капча загружается...