Bilder verkleinern

Im Beitrag „Bilder für Diashow kopieren“ wurden Bilder aus vielen Einzelordnern in einem gemeinsamen Dia-Ordner zusammengefasst. Dabei wurde die Originalgröße der Bilder nicht verändert. Betrachtet man die Bilder aber auf einem Fernseher, ist die volle Auflösung nicht nötig, und man kann sie auf HD-Auflösung von 1920×1080 reduzieren.

Es gibt für die Verkleinerung viele Möglichkeiten, zum Beispiel

  • Kommandozeilenprogramm ImageMagick
  • Bildbearbeitungsprogramm mit Batch-Funktion (z.B. IrfanView)

Verkleinerung mit ImageMagick

Der Vorteil von ImageMagick ist, dass man es programmgesteuert anwenden kann.

ImageMagick kann die Bilder im Zuge eines Skripts automatisch verkleinern. Voraussetzung ist, dass ImageMagick am PC installiert ist. (https://imagemagick.org/index.php)

Ein Bild verkleinern

convert ist eines von vielen Kommandos von ImageMagick. Das Bild pdorf.jpg ist am Desktop und wird durch convert in die Datei pdorf-1920.jpg konvertiert.

PfadS:\onedrive\desktop\pdorf.jpg
Bildgröße1.488 kB
Auflösung4080 px x 3072 px
S:\onedrive\desktop>convert pdorf.jpg -resize 1920x1080 pdorf-1920.jpg

oder mit absoluten Pfaden:

convert S:\onedrive\desktop\pdorf.jpg -resize 1920x1080 S:\onedrive\desktop\pdorf-1920.jpg

Nach der Verkleinerung sind die Bilddaten:

PfadS:\onedrive\desktop\pdorf-1920.jpg
Bildgröße316 kB
Auflösung1434 px x 1080 px

Man sieht, dass das Bild bei der Verkleinerung die Proportionen beibehält und auf die Bildhöhe von 1080 Pixel verkleinert wird.

Bilder in einem Ordner verkleinern

Um alle Bilder in einem Ordner zu verkleinern, benötigt man ein PowerShell-Skript, welches alle Dateien in dem Ordner der Reihe nach bearbeitet. Wenn der Name der Zieldatei gleich mit der Quelldatei ist, wird das Bild überschrieben. Im Falle der Bilder einer Diashow kann man das Original ruhig überschreiben. Sollte etwas nicht passen, kann man die Bilder jederzeit aus den Originalen wiederherstellen.

Um die Kommandozeile in einem PowerShell-Skript aufrufen zu können, benötigt man das Kommando Invoke-Expression.

Invoke-Expression 'convert pdorf.jpg -resize 1920x1080 pdorf-1920.jpg'

Ersetzt man den Bildnamen durch eine Variable, verändert sich das Kommando wie folgt:

$Image = "S:\onedrive\desktop\pdorf.jpg"
Invoke-Expression "convert $Image -resize 1920x1080 $Image"

Das doppelte Anführungszeichen in dem Ausdruck ist wichtig, weil damit die eingesetzten Variablen $Image mit ihrem Wert eingesetzt werden.

Das folgende Programm verändert die Dateigröße aller Bilder im Verzeichnis $Path, sodass die Bilder in den Rahmen passen, der durch das Rechteck 1920*1080 Pixel begrenzt ist.

#Verkleinern aller Bilder im Ordner $Path auf maximal 1920x1080 Pixel
#====================================================================
Clear-Host
$Path = "S:\2022 diashow"
$Images = Get-ChildItem $Path -Attributes Archive
$i = 0
foreach ($Image in $Images) {
    $ImagePath = "'" + $Image.FullName + "'"
    $Expression = "convert $ImagePath -resize 1920x1080 $ImagePath"
    Invoke-Expression $Expression
    $i++
    Write-Host $i -NoNewline
}

Bildvolumen vor der Verkleinerung: 587 MB
Bildvolumen nach der Verkleinerung: 116 MB

Thumbnails anlegen

In Galerien werden Bilder in einer Übersicht in einem Raster von Vorschaubildern angezeigt. Bei einigen wenigen Bildern könnte man die auf Fernsehbildgröße verkleinerten Bilder auch für diese Vorschau verwenden. Bei vielen Bildern und um Übertragungszeit zu sparen, werden aber die bereits verkleinerten Bilder noch einmal zu Vorschaubildern („Thumbnails“) verkleinert. Das Programm ist dasselbe, nur werden die Bilder nicht überschrieben, sondern unter einem geänderten Namen – etwa durch Anhängen von „-thumb“ oder Voranstellen von "thumb-" gespeichert. Das Voranstellen hat den Vorteil, dass man die verkleinerten Dateien durch Sortierung nach dem Namen in einem Vorgang markieren und Weiterbearbeiten kann.

#Anlegen von Vorschaubildern mit dem Präfix thumb- im Ordner $Path
#=================================================================
Clear-Host
$Path = "s:\OneDrive\desktop\2022\"
$Images = Get-ChildItem $Path -Attributes Archive
$i = 0
foreach ($Image in $Images) {
    $ImagePath = "'" + $Image.FullName + "'"
    # $ImagePathThumb = $ImagePath.Replace($Image.Extension, "-thumb"+$Image.Extension)
    $ImagePathThumb = $ImagePath.Replace($Image.Name, "thumb-"+$Image.Name)
    $Expression = "convert $ImagePath -resize 500x500 $ImagePathThumb"
    Invoke-Expression $Expression
    $i++
    Write-Host " $i" -NoNewline
    if (($i % 10) -eq 0) { Write-Host }
}

Verkleinerung mit IrfanView

Mit IrfanView muss man nicht programmieren, es gibt eine komfortable Bedienungsoberfläche.

Weil man viele Bilder gleichzeitig verkleinern möchte, benötigt man den Batchmodus. (Datei -> Batch/Conversion/Rename)

(1) IrfanView -> File -> Bath Conversion Rename -> Batch conversion
(2) Output-Format: Jpg
(3) Use advanced options: Yes
(4) Advanced: klick
(5) CROP: No
(6) RESIZE: Yes
(7) Set one or both sides to: Width: 1920, Height: 1080
(8) Overwrite existing files: Yes
(9) OK
(10) Dateiname: S:\OneDrive\Chronik\2020=2029\2022\2022 diashow
(11) Add All: klick
(12) Use Current (‚look in‘) folder: klick
(13) Start Batch: Klick

Links

Zur Werkzeugleiste springen