HEIC-Bilder mit Open Source Software in JPEG umwandeln

Die Urlaubszeit neigt sich dem Ende und Fotos wollen sortiert, ausgemistet und verteilt werden. Apple speichert seit iOS111 Fotos platzsparend im modernen HEIC-Format. Das High Efficiency Image File Format wird seit macOS High Sierra von Apple und seit Windows 10 Update 1809 von Microsoft mit der HEIF Image Extension unterstützt. Jedoch verstehen andere Systeme, Cloud-Anwendungen und Smartphones dieses Format noch nicht.

Für eine möglichst breite Komptabilität bietet sich JPEG als Dateiformat für Fotos an. Das Urgestein der Bildbearbeitung stammt aus dem Jahre 1992 und wird von so gut wie jedem Betriebssystem und jeder Anwendung unterstützt.

Umwandlung von HEIC in JPG

Für eine Umwandlung von HEIC-Dateien in das JPEG-Format kann ein Online-Dienst, wie z.B. Convertio.co, oder auch eine Software, wie z.B. der iMazing HEIC Converter, verwendet werden. Allerdings vertraut man einem Online-Dienst gleich seine gesamten Bild-Daten an und nicht jeder möchte dem Wohlwollen einer fremden kommerziellen Softwarefirma ausgeliefert sein. Darüber hinaus fehlt fertigen Lösungen jedwede Erweiterbarkeit und ein GUI-Hilfsprogramm ist immer langsamer in der Bedienung im Vergleich zur Kommandozeile.

An dieser Stelle schlägt die große Stunde von ImageMagick – die ultimative Open Source Bildbearbeitung für die Kommandozeile. Das Packet ist sogar noch älter als das JPEG Format und wurde 19902 zum ersten Mal veröffentlicht. Neben der Bildbearbeitung unterstützt ImageMagick über 200 verschiedene Bildformate und kann unter anderem auch HEIC-Dateien lesen. In Kombination mit einem PowerShell-Skript entsteht so schnell eine bequeme Konvertierung von HEIC-Fotos in das JPEG-Format.

Installation von ImageMagick

Neben dem klassischen Download und dem Ausführen des aktuellen Installers von der ImageMagick-Website, kann ImageMagick auch mit dem winget Befehl sehr elegant ohne große Sucherei im Browser über eine Kommandozeile mit administrativen Rechten installiert werden:

winget install -e --id ImageMagick.ImageMagick

Mit diesem Befehl wird die neueste Version von ImageMagick heruntergeladen, installiert und der Pfad zum magick Kommando in der System-Umgebungsvariable Path hinzugefügt. Genauso einfach kann das Packet mit winget uninstall --id ImageMagick.ImageMagick deinstalliert oder mit winget upgrade --id ImageMagick.ImageMagick aktualisiert werden.

Konvertierung mit PowerShell-Skript

Damit man sich nicht alle Parameter der ImageMagick Bibliothek merken muss, liegt die Verwendung eines PowerShell-Skriptes nahe, dass wie ein eingebauter PowerShell-Befehlt mit HEIC-Dateien verwendet werden kann. Die PowerShell verwendet als Nomenklatur immer eine [Verb]-[Substantiv] Kombination und so bietet sich Convert-JPG.ps1 als Bezeichnung für das Skript an:

<#
    .SYNOPSIS
    Converts files to jpg and moves the original file into the recycle bin.
    .DESCRIPTION
    The conversion is done by the ImageMagick library to a JPEG file with 95% quality.
    Files are removed only if they are converted successfully. This script is for the 
    conversion of eg. HEIC images.
    .PARAMETER  $path
    File to be converted. Wildcards are supported.
    .INPUTS
    $path parameter
    .OUTPUTS
    None.
    .EXAMPLE
    PS C:\Scripts> Convert-JPG.ps1 C:\Temp\Images\*
    .NOTES
    Verbose shows the file names
    .LINK
    see https://imagemagick.org/script/mogrify.php
       
#>
[cmdletbinding()]
Param(
    [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
    [string]
    $path
)
Add-Type -AssemblyName Microsoft.VisualBasic
gci $path -Exclude *.jpg | % {
    Write-Verbose $_.Name
    & magick mogrify -format jpg -quality 95% $_
    if($?) {
        [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($_,'OnlyErrorDialogs','SendToRecycleBin')
    }
}

Das Skript importiert am Anfang die .Net Visual Basic DLL um die DeleteFile-Funktion daraus später zu nutzen.

Im ersten Schritt werden alle Dateien des übergebenen Pfades ermittelt. JPEG-Dateien werden dabei ausgeschlossen, da diese nicht mehr konvertiert werden müssen. Als Pfad kann eine einzelne Datei oder auch mehrere Dateien über Platzhalter-Zeichen angegeben werden. Im einfachsten Fall steht ein Sternchen für alle Dateien im aktuellen Verzeichnis.

Im zweiten Schritt konvertiert das Skript mit dem magick mogrify Befehl alle gefundenen Dateien. Das Zielformat ist JPEG mit einer Qualität von 95%. Die Qualität wird angegeben, da es sich bei JPEG um eine verlustbehaftete Kompression handelt. Der mogrify Befehl überschreibt bereits vorhandene Dateien. Bei der Konvertierung werden alle Metadaten, wie z.B. Exif-Daten, übernommen. Wenn dies nicht gewünscht ist, können mit dem Parameter -strip des magick Befehls alle Metadaten entfernt werden.

Der letzte Befehl wird nur ausgeführt, wenn die Umwandlung erfolgreich war. In diesem Fall wird die Quell-Datei in den Papierkorb verschoben. Dadurch müssen die JPEG-Dateien nicht zwischen den Originaldateien mühsam herausgesucht werden. Dies setzt jedoch voraus, dass die Konvertierung mit Kopien erfolgt, wenn die originalen HEIC-Dateien erhalten bleiben sollen. Die Verwendung des Papierkorbs erlaubt die Wiederherstellung der Originaldateien, falls diese aus Versehen gelöscht wurden.

Auf Netzwerklaufwerken findet das Löschen jedoch sofort statt und es wird kein Umweg über den Papierkorb genommen.

Ausführen des Skriptes

Damit die Skript-Datei möglichst einfach ausgeführt werden kann, sollte sich diese in einem über die Path-Variable angegeben Ordner befinden. Dies kann z.B. der Installationsordner von ImageMagik sein. So kann das Skript sehr einfach über den Befehlt Convert-JPG.ps1 * für alle HEIC-Dateien im aktuellen Ordner aufgerufen werden:

Convert-JPG.ps1 im Terminal

Neben Fotos im HEIC-Format verarbeitet das Skript auch alle anderen Bild-Dateien und konvertiert diese in das JPEG-Format.

Downloads

Convert-JPG.zip0,8 KBPowerShell Skript Convert-JPG.ps1

Weitere Informationen