Während der Fertigstellung des Beitrags „Bilder verkleinern“ bekam ich einen Anruf von Wolfgang, für den dieses Programm eigentlich gedacht war. Ich erklärte ihm die Funktionsweise und er hatte auch schon den Haken an der Sache gefunden, denn man kann mit dem dortigen Batch-Programm zwar die Bilder eines einzelnen Verzeichnisses verkleinern aber Wolfgang hat Hunderte Verzeichnisse.
Bei einem einzelnen neuen Verzeichnis, das einzutragen ist, leistet das vorher beschriebene Batch-Programm i_resizeR.bat
gute Dienste. Wenn es aber darum geht, die Bilder in allen bestehenden Verzeichnissen zu verkleinern, wird es mühsam, weil man das Batch-Programm für alle Verzeichnisse händisch ausführen müsste.
Kein Problem, dann erweitern wir das Batch-Programm um eine rekursive Funktionalität. Das wäre auch gleich erledigt gewesen, aber es ergaben sich Probleme, die mit der veralteten Batch-Sprache zu einem ziemlich unübersichtlichen Programm geführt hätte und daher wurde dieser Weg verlassen.
Da es ohnehin wünschenswerte und weitergehende Funktionen gibt, wurde statt dieser Erweiterung des Batch-Programms eine PowerShell-Version dieses Programms mit dem Namen i_resizeR.ps1
entworfen.
Dieses neue Programm hat folgende zusätzliche Eigenschaften:
- Verkleinert Bilder mit den Endungen
.jpg, .jpeg, .pn
g und erzeugt Verkleinerungen im.jpg
-Format - Es gibt vier Optionen, die man dem dem PowerShell-Skript mitgeben kann:
/e /r /l /p
Schritt-für-Schritt-Anleitung
Vorbereitung (nur erstmals erforderlich)
- Installieren von IrfanView
- Aufnehmen des IrfanView-Ordners in die Umgebungsvariable
PATH
(Beschreibung siehe im Beitrags „Bilder verkleinern“) - Kopieren der Batch-Dateien
i_resizeR.ps1
in ein Pfadverzeichnis (bei mir heißt dieses Verzeichnis, das ausführbare Dateien enthält,C:\_bin
). Der vorangestellte Unterstrich hat die Wirkung, dass dieses Verzeichnis ganz oben im Verzeichnisbaum angezeigt wird und nicht irgendwo in der Mitte.
Einfügen und Verkleinerung von Bildern in einem beliebigen Ordner am PC
- Anlegen eines Bilderordners irgendwo im Verzeichnisbaum
- Kopieren der Originalbilder von der SD-Karte in diesen Bilderordner
- Öffnen des Ordners, der den Bilderordner enthält, im Windows-Explorer
- Markieren des Bilderordners
- Öffnen des Kontext-Menüs (Rechte Maustaste oder Taste “Kontext-Menü”) bei gedrückter Shift-Taste
- -> Auswählen von “Eingabeaufforderung hier öffnen” (öffnet eine Eingabeaufforderung und setzt den Pfad auf den Bilderordner)
- Aufruf von
i_resizeR.ps1
im Demomodus
Beispiel:S:\Desktop\resize\bilder>powershell i_resizeR.ps1
Mit diesem Aufruf wird das Programm grundsätzlich durchlaufen aber nicht ausgeführt, und man sieht, welches Verzeichnis bearbeitet wird - Ausführung von
i_resizeR.ps1
Beispiel:S:\Desktop\resize\bilder>powershell i_resizeR.ps1 /e
Mit dem Argument /e wird das Programm ausgeführt.
Verkleinern aller Bilder in einem Verzeichnisbaum
- Öffnen des Ersten Verzeichnisses (das sind die ersten Schritte im vorigen Punkt „Einfügen und Verkleinerung von Bildern…“
- Aufruf von
i_resizeR.ps1
im Demomodus
S:\Desktop\resize\bilder>powershell i_resizeR.ps1 /r
Mit diesem Aufruf wird das Programm grundsätzlich durchlaufen aber nicht ausgeführt, und man sieht, welche Verzeichnisse bearbeitet werden würden. - Aufruf von
i_resizeR
S:\Desktop\resize\bilder>powershell i_resizeR.ps1 /r /e
Mit dem Argument /e wird das Programm ausgeführt.
Das PowerShell-Skript i_resizeR.ps1
#Resize Images cls $recursive=$false $LONGSIDE=2048 $ori=".ori" $PathStartingAt = [environment]::CurrentDirectory $execute=$false function ResizeFiles($From0, $To) { $From=$From0+"\*.jpg" $To=$To+"\*.jpg" #&'i_view32 "S:\Desktop\resize\bilder/.ori" /resize_long=$LONGSIDE /aspectratio /resample "/convert=S:\Desktop\resize\bilder"' $command = 'i_view32 "$From" /resize_long=$LONGSIDE /aspectratio /resample "/convert=$To"' iex "& $command" $From=$From0+"\*.jpeg" $command = 'i_view32 "$From" /resize_long=$LONGSIDE /aspectratio /resample "/convert=$To"' iex "& $command" $From=$From0+"\*.png" $command = 'i_view32 "$From" /resize_long=$LONGSIDE /aspectratio /resample "/convert=$To"' iex "& $command" } function MoveFiles($From, $To) { Get-ChildItem -Path $From | Where-Object {$_.Name.ToLower().EndsWith(".jpg") -or $_.Name.ToLower().EndsWith(".jpeg") -or $_.Name.ToLower().EndsWith(".png")} | Move-Item -destination $To } function ResizeFilesInDirectory($path) { Write-Host ("Resizing "+$path) $path_ori = $path+"\"+$ori if (Test-Path $path_ori) { } else { if ($execute) { New-Item -ItemType directory -Path $path_ori > $null MoveFiles $path $path_ori } } if ($execute) { ResizeFiles $path_ori $path } } function ResizeRecursive($files) { foreach ($file in Get-ChildItem -Force $files) { if ($file.Mode -like "d*") # directory { if ($file.Name.Contains(".ori")) { continue; } else { ResizeFilesInDirectory $file.FullName ResizeRecursive $file.FullName } } } } $recursive_text="nonrecursive" $execute_text="demomode" echo $args for ($i=0; $i -lt $args.count; $i++) { $arg = ([string]$args[$i]).ToLower() #Write-Host $arg if ($arg.StartsWith("/")) { echo $arg switch ($arg.Substring(1,1)) { "r" { $recursive=$true; $recursive_text="recursive" } "l" { $LONGSIDE=[int]$arg.Substring(2) } "p" { $PathStartingAt=[string]$arg.Substring(2) } "e" { $execute=$true; $execute_text="executing" } default {} } } } echo ("Resizing to: " + $LONGSIDE + " Pixel " + $recursive_text+ ", starting at: "+$PathStartingAt + " " + $execute_text) ResizeFilesInDirectory $PathStartingAt if ($recursive) { ResizeRecursive $PathStartingAt } echo ("Finished resizing in "+$PathStartingAt)
Alle Parameter
/r
rekursiver Aufruf/e
Ausführung (wenn/e
nicht angegeben ist, werden die Verzeichnisse nur durchlaufen aber es wird nichts verändert)/l
Veränderung der Bildgröße. Voreingestellt sind 2048 Pixel.
Beispiel:/l400
setzt die längste Bilddimension auf 400 Pixel. Achtung: zwischen/l
und400
ist kein Abstand/p
Pfadangabe. Voreingestellt ist das aktuelle Verzeichnis. Aber es ist möglich, dieses Verzeichnis zu verändern. Beispiel:/pS:\Desktop\resize\bilder
. Achtung: zwischen/p
undS:\...
ist kein Abstand. Eine besondere Schreibweise ist nötig, wenn sich in dem Pfad ein Blank befindet, dann nämlich muss man den Pfad in einfache Anführungszeichen setzen. Beispiel:/p'S:\Desktop\resize\bilder\Meine Bilder'
.
Aufrufbeispiele
S:\Desktop\resize\bilder>powershell i_resizeR.ps1 Pfad: aktuelles Verzeichnis S:\Desktop\resize\bilder Bildgröße: 2048 Pixel Ausführung: nein Rekursiv: nein S:\Desktop\resize\bilder>powershell i_resizeR.ps1 /e Pfad: aktuelles Verzeichnis S:\Desktop\resize\bilder Bildgröße: 2048 Pixel Ausführung: ja Rekursiv: nein S:\Desktop\resize\bilder>powershell i_resizeR.ps1 /e /r Pfad: aktuelles Verzeichnis S:\Desktop\resize\bilder Bildgröße: 2048 Pixel Ausführung: ja Rekursiv: ja S:\Desktop\resize\bilder>powershell i_resizeR.ps1 /e /r /l400 Pfad: aktuelles Verzeichnis S:\Desktop\resize\bilder Bildgröße: 400 Pixel Ausführung: ja Rekursiv: ja S:\Desktop\resize\bilder>powershell i_resizeR.ps1 /e /r /pS:\Desktop\resize Pfad: S:\Desktop\resize Bildgröße: 2048 Pixel Ausführung: ja Rekursiv: ja S:\Desktop\resize\bilder>powershell i_resizeR.ps1 /e /r /p'S:\Desktop\resize\bilder\Meine Bilder' Pfad: S:\Desktop\resize\bilder\Meine Bilder Bildgröße: 2048 Pixel Ausführung: ja Rekursiv: ja
Links
- Früherer Beitrag „Bilder verkleinern“ (mit IrfanView und Batch-Dateien)
- Homepage von IrfanView
- Batch-Dateien und resize-Ordner (Datei downloaden und am Desktop entpacken. Danach beliebige .jpg-Dateien in den Ordner
bilder
undMeine Bilder
kopieren. - Word-Datei Verkleinern mit IrfanView
- Weitere nützliche Kommandozeilen-Tipps für IrfanView
Franz war pensionierter HTL Lehrer (TGM), Präsident von ClubComputer, Herausgeber der Clubzeitung PCNEWS und betreute unser Clubtelefon und Internet Support. Er war leidenschaftlicher Rapid Wien Fan. Er ist leider Anfang Jänner 2024 nach langer schwerer Krankheit verstorben.
Neueste Kommentare