Wie konvertiere ich mehrere eingebettete PNGs in JPEGs in einer Powerpoint-Datei?

6

Ich habe eine große PowerPoint-Datei mit vielen eingebetteten Bildern, von denen einige JPEGs und einige PNGs sind. Um die Datei so klein wie möglich zu halten, möchte ich, dass alle PNG-Bilder in JPEGs konvertiert werden.

Dies kann erreicht werden, indem jedes Bild manuell gespeichert, konvertiert und erneut zur Präsentation hinzugefügt wird. Dies nimmt jedoch viel Zeit in Anspruch. Gibt es Funktionen für eine Stapelkonvertierung in MS Powerpoint (2016) oder eine andere Methode, um dies effizienter zu erreichen?


Hinzugefügt: Mir ist klar, dass Bilder in PowerPoint komprimiert werden können, und das habe ich bereits getan. Dies reduziert die Dateigröße jedoch nicht so sehr wie das Ersetzen der PNGs durch JPEGs, da es sich bei den PNGs um sehr viel größere Dateien handelt - daher die Frage.

Harry Vervet
quelle

Antworten:

4

Sie können PowerShell verwenden! Da es sich bei modernen Office-Dokumenten eigentlich um ZIP-Dateien handelt, die hauptsächlich XML-Dateien enthalten, können Sie diese relativ einfach bearbeiten, ohne auf Office-Komponenten angewiesen zu sein. Ich habe dieses Skript für Sie geschrieben:

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

Es öffnet die angegebene PPTX-Datei als ZIP-Archiv, findet jedes eingebettete PNG-Bild und konvertiert dieses Bild in ein JPG. Die Dateierweiterung im Archiv wird nicht aktualisiert, PowerPoint scheint sich jedoch nicht darum zu kümmern (getestet in PowerPoint 2016 unter Windows 10). Wenn Sie möchten, dass versucht wird, mit allen Bildtypen zu arbeiten (ich habe keine anderen Formate getestet), ändern Sie diese Zeile:

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

Dazu:

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

Speichern Sie das Skript als .ps1Datei, z pptxjpg.ps1. Wenn Sie dies noch nicht getan haben, befolgen Sie die Anweisungen im Abschnitt "Aktivieren von Skripten" des PowerShell-Tag-Wikis . Sie können es dann an einer PowerShell-Eingabeaufforderung wie folgt ausführen:

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

Es ist ein optionaler Parameter erforderlich, der die JPG-Qualität angibt (standardmäßig 50). Wenn Sie noch mehr Speicherplatz sparen möchten, können Sie einen niedrigeren Wert wie den folgenden angeben:

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

Beim Testen dieses letzteren Befehls wurde die Größe einer Präsentation mit einem hochauflösenden Screenshot und einem mittelgroßen Diagramm von 982 KB auf 253 KB reduziert.

Ben N
quelle
1

Wenn Sie die pptx-Datei unabhängig von den eingestellten Bildformaten minimieren möchten, wählen Sie ein Bild aus Formatund suchen Sie im Menüband die Schaltfläche Compress Pictures. Deaktivieren Sie dieses Kontrollkästchen Apply only to this picture, um es auf alle Bilder anzuwenden.

Optional: Aktivieren Sie das Optionsfeld E-mail 96 ppi. Das wird die Auflösung herabstufen und somit leichteres pptx erzeugen. Aktivieren Sie dieses Kontrollkästchen Delete cropped areas of pictures, um nicht verwendete Teile zu verwerfen, die mit der Schaltfläche Zuschneiden ausgeblendet wurden.

Sanny
quelle
2
Ich weiß, dass Sie die Bilder komprimieren können, aber das ist nicht das, was ich frage. Darüber hinaus scheint die Verwendung dieser Methode nur alle Bilder eines bestimmten Dateityps zu komprimieren (dh es scheint nur die JPEGs zu komprimieren, es sei denn, Sie wiederholen den Vorgang in einem PNG). Die PNG-Bilder sind immer noch viel größer als die JPEGs, daher möchte ich alle PNGs durch JPEG-Versionen ersetzen, wie in der Frage angegeben.
Harry Vervet
Erstens komprimiert diese Methode alle Bilder, nicht wie Sie denken. Hier ( i.imgur.com/GF9S9FA.png ) führte ich die Komprimierung durch, indem ich ein JPEG-Bild auswählte, der Prozess ging auch mit dem PNG-Bild einher. Selbst wenn es Ihnen gelingt, PNG in JPEG zu konvertieren, wird die Verknüpfung unterbrochen, über die die neu konvertierten Bilder erneut eingefügt werden müssen. Denken Sie daran, dass PNG (verlustfrei) immer viel größer ist als JPEG (verlustbehaftete Komprimierung). Wenn diese Antwort Sie nicht zufriedenstellt, werde ich es löschen.
Sanny
2
Diese Methode komprimiert das Bild, indem die Auflösung herabgesetzt und der verborgene Bereich beschnitten wird. Das Bildformat ist reserviert, es bleibt also unabhängig vom Originalformat erhalten.
Yvon