¡Puedes usar PowerShell! Dado que los documentos de Office modernos son en realidad archivos ZIP que contienen principalmente archivos XML, podemos manipularlos con bastante facilidad sin depender de ningún componente de Office. Escribí este guión para ti:
[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()
Abre el archivo PPTX dado como un archivo ZIP, encuentra cada imagen PNG incrustada y convierte esa imagen en un JPG. No actualiza la extensión del archivo dentro del archivo, pero parece que a PowerPoint no le importa (probado en PowerPoint 2016 en Windows 10). Si desea que intente trabajar con todos los tipos de imágenes (no he probado otros formatos), cambie esta línea:
$zip.Entries | ? {$_.FullName -like 'ppt/media/*.png'} | % {
A esto:
$zip.Entries | ? {$_.FullName.StartsWith('ppt/media/')} | % {
Guarde el script como .ps1
archivo, por ejemplo pptxjpg.ps1
. Si aún no lo ha hecho, siga las instrucciones en la sección Habilitación de scripts de la etiqueta de PowerShell wiki . Luego puedes ejecutarlo desde un indicador de PowerShell como este:
.\pptxjpg.ps1 C:\path\to\presentation.pptx
Toma un parámetro opcional que especifica la calidad de JPG, el valor predeterminado es 50. Si desea ahorrar aún más espacio, puede especificar un valor más bajo, como:
.\pptxjpg.ps1 C:\path\to\presentation.pptx -Quality 20
Cuando probé este último comando, redujo el tamaño de una presentación que contiene una captura de pantalla de alta resolución y un diagrama de tamaño mediano de 982 KB a 253 KB.