Mal wieder was schnelles aus der Praxis: Bei meiner Arbeit ist es immer mal wieder erforderlich, Thumbnails — vor allem aus PDF-Dokumenten und gerne auch mal in verschiedenen Größen — zu erstellen. Der herkömmliche Arbeitsprozess sah dann bislang so aus, die Datei mit Photoshop oder Acrobat Pro zu öffnen und von Hand bzw. per vordefinierter Aktion zu verkleinern und als .png abzuspeichern. Und wie bei allen redundanten Aufgaben, die einem mit der Zeit auf die Nerven gehen, fragt man sich: Geht das nicht auch einfacher? Abhilfe schafft eine Kombination zweier mächtiger Open-Source-Tools: ImageMagick und AutoHotkey.

ImageMagick…

ImageMagick ist so etwas wie die eierlegende Wollmilchsau der kommandozeilenbasierten Bildvearbeitung und Formatkonversion. Gerade was die Umwandlung von einem in ein anderes Format angeht, stehen einem allerhand Möglichkeiten offen.
Will man damit neben Bilddateien auch noch PDF-Dateien verarbeiten, benötigt man zusätzlich noch eine Installation von GhostScript, das als PDF-Interpreter fungiert. ((Wenn es hingegen ausschließlich um die Verarbeitung von PDFs geht, empfiehlt sich nach meinem Kenntnisstand die direkte Übergabe an GhostScript per Kommandozeile, da damit wohl eine bessere Performance erreicht werden kann als auf dem Umweg über ImageMagick.))
Praktischer Weise bringt ImageMagick schon einen Parameter für Thumbnails mit, der sich nach einigen Versuchen mit eigenen Einstellungen als die beste Lösung für meine Problemstellung umerwies:
[white_box]convert.exe -thumbnail 300x input.pdf output.png[/white_box] Dabei gibt 300x die Breite des fertigen Thumbnails in Pixel an.

…meets AutoHotkey

Nachdem die entsprechende Konfiguration gefunden war, ging es nur noch darum, die Umwandlung zu automatisieren. Hier kommt ein weiteres meiner Lieblingstools zum Einsatz: AutoHotkey (oder kurz AHK) ist eine Skriptsprache, mit der man die Oberfläche von Windows steuern, Textersetzungen machen oder globale Tastenkombinationen setzen oder sogar re-mappen kann.
Die Idee: Man wählt im Explorer die zu konvertierende Datei aus. Per Hotkey wird dann, nachdem über eine Eingabemaske die Breite der Ausgabe festgelegt wurde, ImageMagick mit den vorgenannten Parametern aufgerufen und so die Datei umgewandelt und unter dem gleichen Namen — nur eben in dem umgewandelten Format — abgespeichert. Als Ausgabeformat wurde .png gewählt. Der Code sieht dann so aus:

; =====================================================================================
; Markierte (PDF-)Datei im Explorer mit ImageMagick (erfordert zusätzlich installiertes GhostScript bei PDFs!) in .png umwandeln
; =====================================================================================

#IfWinActive ahk_class CabinetWClass ;nur in Explorerfenstern ausführen
{
^t:: ;Shortcut STRG + T
vImageMagickPath = "C:\Pfad\zu\ImageMagick\convert.exe" ;Pfad der ImageMagick-Programmdateien
ClipSave := ClipBoard  ;Zwischenablage sichern
Send, ^c  ;Dateiname in Zwischenablage setzen
ClipWait  ;Auf Zwischenablage warten
vDateiname := ClipBoard  ;Dateinamen in Variable schreiben
SplitPath, vDateiname,,vPfad,vExtension,vName, ;Extrahieren des Dateinamens ohne Endung
ClipBoard := ClipHelp ;Wiederherstellung der Zwischenablage

if vExtension not in pdf,png,jpg,jpeg ;Fehlerabfrage Dateityp - kann erweitert werden
	{
		MsgBox, Bitte erlaubten Dateityp (pdf, png, jpg, jpeg) auswählen!
		return
	}
else
	{
		lAbfrage:
		InputBox, vBreite, Breite in px:,,,150,100,,,,,300 ;Abfrage der Thumbnail-Breite
		if ErrorLevel
			MsgBox, Aktion abgebrochen.
		else
		{
			if vBreite is integer ; Fehlerabfrage Zahleneingabe
				Run, %vImageMagickPath% -thumbnail %vBreite%x "%vDateiname%" "%vPfad%\%vName%_%vBreite%x.png"
			else 
			{
				MsgBox, Bitte geben Sie einen gültigen Zahlenwert ein!
				Goto, lAbfrage
			}
		return
		}
	return
	}
}
return

Für alle, die aus der Kommentierung im Code nicht ganz schlau werden, hier einige erläuternde Worte:
Zunächst wird festgelegt, dass der Shortcut — ich habe die Aktion auf STRG + T (^t::) gelegt — ausschließlich in Explorer-Fenstern ausgeführt wird: [white_box]#IfWinActive ahk_class CabinetWClass[/white_box] In einer Variable wird anschließend der Pfad der ImageMagick-Dateien festgelegt. In den Zeilen 9-14 wird zunächst die Zwischenablage gesichert; anschließend wird die Tastenkombination STRG + C simuliert, um die markierte Datei bzw. deren vollständigen Pfad in die Zwischenablage zu übernehmen. Dieser Dateipfad wird dann in die Variable vDateiname übernommen. Mit SplitPath wird dieser Pfad dann in seine Einzelteile zerlegt: vPfad bekommt den Wert des Ordnerpfades (also ohne Dateiname und Endung) zugewiesen, vExtension die Dateiendung, mit der später geprüft werden soll, ob überhaupt eine legitime Datei markiert wurde und zuletzt wird an vName der Dateiname ohne Pfad und ohne Endung übergeben. Zuletzt wird der vorige Inhalt der Zwischenablage wiederhergestellt.
Jetzt geht es so langsam ans Eingemachte: Es folgt mit if vExtension not in pdf,png,jpg,jpeg eine Abfrage der zulässigen Dateitypen, die natürlich bei Bedarf noch erweitert werden könnten. Wenn es sich um eine unzulässige Datei handelt, wird eine Fehlermeldung ausgegegeben, andernfalls wird nun mit
[white_box]InputBox, vBreite, Breite in px:,,,150,100,,,,,300[/white_box] ein Eingabefeld geöffnet, dessen übergebener Wert in der Variable vBreite abgelegt wird. Die übrigen Angaben dieser Codezeile legen das Erscheinungsbild des Eingabefensters (Titel, Höhe und Breite) sowie einen Standardwert (in diesem Fall 300) fest. Wird die Eingabe abgebrochen, erscheint eine entsprechende Meldung, andernfalls wird geprüft, ob die Eingabe numerisch war. Ist dies nicht der Fall, wird auch hier eine entsprechende Meldung ausgegeben und auf das Label lAbfrage zurückverwiesen, sodass eine erneute Eingabe erfolgen kann. Wurde ein erlaubter Wert eingegeben, wird schließlich ImageMagick aufgerufen und die getroffenen Optionen werden übergeben. Nach kurzer Zeit — die genaue Dauer hängt von der Größe der Ausgangsdatei ab — liegt das konvertierte Bild dann im gleichen Ordner wie das Original.