Come convertire più PNG incorporati in file JPEG nel file Powerpoint?


6

Ho un grande file PowerPoint con molte immagini incorporate, alcune delle quali sono JPEG e alcuni PNG. Per rendere il file il più piccolo possibile, vorrei che tutte le immagini PNG venissero convertite in JPEG.

Questo può essere fatto salvando manualmente ogni immagine, convertendola e aggiungendola nuovamente alla presentazione, ma ci vuole molto tempo. Esiste la funzionalità per eseguire una conversione batch in MS Powerpoint (2016) o qualche altro metodo per ottenere questo risultato in modo più efficiente?


Aggiunto: Mi rendo conto che le immagini possono essere compresse in PowerPoint, e l'ho già fatto. Ma ciò non riduce le dimensioni del file tanto quanto la sostituzione dei PNG con JPEG, dal momento che i PNG sono file molto più grandi - da qui la domanda.

Risposte:


4

Puoi usare PowerShell! Poiché i moderni documenti di Office sono in realtà file ZIP contenenti principalmente file XML, possiamo manipolarli abbastanza facilmente senza fare affidamento su alcun componente di Office. Ho scritto questo script per te:

[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()

Apre il file PPTX dato come archivio ZIP, trova ogni immagine PNG incorporata e converte l'immagine in JPG. Non aggiorna l'estensione del file all'interno dell'archivio, ma a PowerPoint sembra non importare (testato su PowerPoint 2016 su Windows 10). Se vuoi che tenti di lavorare con tutti i tipi di immagine (non ho testato altri formati), cambia questa linea:

$zip.Entries | ? {$_.FullName -like 'ppt/media/*.png'} | % {

A questo:

$zip.Entries | ? {$_.FullName.StartsWith('ppt/media/')} | % {

Salva lo script come .ps1 file, ad es. pptxjpg.ps1. Se non lo hai già fatto, segui le istruzioni nella sezione Abilitazione script di il wiki del tag PowerShell . È quindi possibile eseguirlo da una richiesta di PowerShell in questo modo:

.\pptxjpg.ps1 C:\path\to\presentation.pptx

Richiede un parametro opzionale che specifica la qualità JPG, con impostazione predefinita a 50. Se vuoi risparmiare ancora più spazio, potresti specificare un valore più basso, in questo modo:

.\pptxjpg.ps1 C:\path\to\presentation.pptx -Quality 20

Quando ho testato questo ultimo comando, ha ridotto le dimensioni di una presentazione contenente uno screenshot ad alta risoluzione e un diagramma di dimensioni medie da 982 KB a 253 KB.


2

Se stai cercando di minimizzare il file pptx, indipendentemente dall'impostazione dei formati immagine, seleziona un'immagine e dal menu Ribbon, scegli Format e trova il pulsante Compress Pictures. Un-tick Apply only to this picture per applicare a tutte le immagini.

Opzionale: impostare il pulsante di opzione su E-mail 96 ppi. Questo ridurrà la risoluzione e quindi creerà un pptx più leggero. zecca Delete cropped areas of pictures per scartare porzioni inutilizzate nascoste con il pulsante Ritaglia.


2
So che puoi comprimere le immagini, ma non è quello che sto chiedendo. Inoltre, l'utilizzo di questo metodo sembra solo comprimere tutte le immagini di un tipo di file give (ad esempio sembra solo comprimere i file JPEG a meno che non si vada e ripetere il processo su un PNG). Le immagini PNG sono ancora molto più grandi di quelle JPEG, quindi voglio sostituire tutti i PNG con le versioni JPEG come indicato nella domanda.
Harry Vervet

Innanzitutto, questo metodo comprime tutte le immagini, non come credi. Qui ( i.imgur.com/GF9S9FA.png ) Ho eseguito la compressione selezionando un'immagine JPEG, il processo è andato anche con l'immagine PNG. Tuttavia, anche se si riesce a convertire PNG in JPEG, si interrompe la rottura del collegamento che richiede di reinserire le immagini appena convertite. Ricorda, PNG (senza perdita di dati) sarà sempre molto più grande di JPEG (compressione con perdita di dati). Se questa risposta non ti soddisfa, la cancellerò.
Sanny

2
Questo metodo comprime l'immagine abbassando la risoluzione e ritagliando l'area nascosta. Il formato dell'immagine è riservato, quindi non importa quale sia il formato originale, è preservato.
Yvon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.