{"id":542,"date":"2014-07-08T02:26:38","date_gmt":"2014-07-08T00:26:38","guid":{"rendered":"http:\/\/florianko.de\/blog\/?p=542"},"modified":"2014-07-08T02:26:38","modified_gmt":"2014-07-08T00:26:38","slug":"thumbnails-per-shortcut-erstellen","status":"publish","type":"post","link":"http:\/\/florianko.de\/blog\/2014\/07\/08\/thumbnails-per-shortcut-erstellen\/","title":{"rendered":"Thumbnails per Shortcut erstellen"},"content":{"rendered":"<p>Mal wieder was schnelles aus der Praxis: Bei meiner Arbeit ist es immer mal wieder erforderlich, Thumbnails &#8212; vor allem aus PDF-Dokumenten und gerne auch mal in verschiedenen Gr\u00f6\u00dfen &#8212; zu erstellen. Der herk\u00f6mmliche Arbeitsprozess sah dann bislang so aus, die Datei mit Photoshop oder Acrobat Pro zu \u00f6ffnen 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\u00e4chtiger Open-Source-Tools: <a href=\"http:\/\/www.imagemagick.org\/\" title=\"Homepage\" target=\"_blank\" rel=\"noopener\"><em>ImageMagick<\/em><\/a> und <a href=\"http:\/\/www.autohotkey.com\/\" title=\"Homepage\" target=\"_blank\" rel=\"noopener\"><em>AutoHotkey<\/em><\/a>.<\/p>\n<p><!--more--><\/p>\n<h3>ImageMagick&#8230;<\/h3>\n<p><em>ImageMagick<\/em> 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\u00f6glichkeiten offen.<br \/>\nWill man damit neben Bilddateien auch noch PDF-Dateien verarbeiten, ben\u00f6tigt man zus\u00e4tzlich noch eine Installation von <a href=\"http:\/\/www.ghostscript.com\/\" title=\"Homepage\/Download\" target=\"_blank\" rel=\"noopener\"><em>GhostScript<\/em><\/a>, das als PDF-Interpreter fungiert. ((Wenn es hingegen ausschlie\u00dflich um die Verarbeitung von PDFs geht, empfiehlt sich nach meinem Kenntnisstand die direkte \u00dcbergabe an <em>GhostScript<\/em> per Kommandozeile, da damit wohl eine bessere Performance erreicht werden kann als auf dem Umweg \u00fcber <em>ImageMagick<\/em>.))<br \/>\nPraktischer Weise bringt <em>ImageMagick<\/em> schon einen Parameter f\u00fcr Thumbnails mit, der sich nach einigen Versuchen mit eigenen Einstellungen als die beste L\u00f6sung f\u00fcr meine Problemstellung umerwies:<br \/>\n[white_box]<code>convert.exe -thumbnail 300x input.pdf output.png<\/code>[\/white_box] Dabei gibt <code>300x<\/code> die Breite des fertigen Thumbnails in Pixel an.<\/p>\n<h3>&#8230;meets AutoHotkey<\/h3>\n<p>Nachdem die entsprechende Konfiguration gefunden war, ging es nur noch darum, die Umwandlung zu automatisieren. Hier kommt ein weiteres meiner Lieblingstools zum Einsatz: <em>AutoHotkey<\/em> (oder kurz AHK) ist eine Skriptsprache, mit der man die Oberfl\u00e4che von Windows steuern, Textersetzungen machen oder globale Tastenkombinationen setzen oder sogar re-mappen kann.<br \/>\nDie Idee: Man w\u00e4hlt im Explorer die zu konvertierende Datei aus. Per Hotkey wird dann, nachdem \u00fcber eine Eingabemaske die Breite der Ausgabe festgelegt wurde, <em>ImageMagick<\/em> mit den vorgenannten Parametern aufgerufen und so die Datei umgewandelt und unter dem gleichen Namen &#8212; nur eben in dem umgewandelten Format &#8212; abgespeichert. Als Ausgabeformat wurde .png gew\u00e4hlt. Der Code sieht dann so aus:<\/p>\n<pre class=\"lang:as decode:true \" >; =====================================================================================\n; Markierte (PDF-)Datei im Explorer mit ImageMagick (erfordert zus\u00e4tzlich installiertes GhostScript bei PDFs!) in .png umwandeln\n; =====================================================================================\n\n#IfWinActive ahk_class CabinetWClass ;nur in Explorerfenstern ausf\u00fchren\n{\n^t:: ;Shortcut STRG + T\nvImageMagickPath = \"C:\\Pfad\\zu\\ImageMagick\\convert.exe\" ;Pfad der ImageMagick-Programmdateien\nClipSave := ClipBoard  ;Zwischenablage sichern\nSend, ^c  ;Dateiname in Zwischenablage setzen\nClipWait  ;Auf Zwischenablage warten\nvDateiname := ClipBoard  ;Dateinamen in Variable schreiben\nSplitPath, vDateiname,,vPfad,vExtension,vName, ;Extrahieren des Dateinamens ohne Endung\nClipBoard := ClipHelp ;Wiederherstellung der Zwischenablage\n\nif vExtension not in pdf,png,jpg,jpeg ;Fehlerabfrage Dateityp - kann erweitert werden\n\t{\n\t\tMsgBox, Bitte erlaubten Dateityp (pdf, png, jpg, jpeg) ausw\u00e4hlen!\n\t\treturn\n\t}\nelse\n\t{\n\t\tlAbfrage:\n\t\tInputBox, vBreite, Breite in px:,,,150,100,,,,,300 ;Abfrage der Thumbnail-Breite\n\t\tif ErrorLevel\n\t\t\tMsgBox, Aktion abgebrochen.\n\t\telse\n\t\t{\n\t\t\tif vBreite is integer ; Fehlerabfrage Zahleneingabe\n\t\t\t\tRun, %vImageMagickPath% -thumbnail %vBreite%x \"%vDateiname%\" \"%vPfad%\\%vName%_%vBreite%x.png\"\n\t\t\telse \n\t\t\t{\n\t\t\t\tMsgBox, Bitte geben Sie einen g\u00fcltigen Zahlenwert ein!\n\t\t\t\tGoto, lAbfrage\n\t\t\t}\n\t\treturn\n\t\t}\n\treturn\n\t}\n}\nreturn\n<\/pre>\n<p>F\u00fcr alle, die aus der Kommentierung im Code nicht ganz schlau werden, hier einige erl\u00e4uternde Worte:<br \/>\nZun\u00e4chst wird festgelegt, dass der Shortcut &#8212; ich habe die Aktion auf STRG + T (<code>^t::<\/code>) gelegt &#8212; ausschlie\u00dflich in Explorer-Fenstern ausgef\u00fchrt wird: [white_box]<code>#IfWinActive ahk_class CabinetWClass<\/code>[\/white_box] In einer Variable wird anschlie\u00dfend der Pfad der ImageMagick-Dateien festgelegt. In den Zeilen 9-14 wird zun\u00e4chst die Zwischenablage gesichert; anschlie\u00dfend wird die Tastenkombination STRG + C simuliert, um die markierte Datei bzw. deren vollst\u00e4ndigen Pfad in die Zwischenablage zu \u00fcbernehmen. Dieser Dateipfad wird dann in die Variable <code>vDateiname<\/code> \u00fcbernommen. Mit <code>SplitPath<\/code> wird dieser Pfad dann in seine Einzelteile zerlegt: <code>vPfad<\/code> bekommt den Wert des Ordnerpfades (also ohne Dateiname und Endung) zugewiesen, <code>vExtension<\/code> die Dateiendung, mit der sp\u00e4ter gepr\u00fcft werden soll, ob \u00fcberhaupt eine legitime Datei markiert wurde und zuletzt wird an <code>vName<\/code> der Dateiname ohne Pfad und ohne Endung \u00fcbergeben. Zuletzt wird der vorige Inhalt der Zwischenablage wiederhergestellt.<br \/>\nJetzt geht es so langsam ans Eingemachte: Es folgt mit <code>if vExtension not in pdf,png,jpg,jpeg<\/code> eine Abfrage der zul\u00e4ssigen Dateitypen, die nat\u00fcrlich bei Bedarf noch erweitert werden k\u00f6nnten. Wenn es sich um eine unzul\u00e4ssige Datei handelt, wird eine Fehlermeldung ausgegegeben, andernfalls wird nun mit<br \/>\n[white_box]<code>InputBox, vBreite, Breite in px:,,,150,100,,,,,300<\/code>[\/white_box] ein Eingabefeld ge\u00f6ffnet, dessen \u00fcbergebener Wert in der Variable <code>vBreite<\/code> abgelegt wird. Die \u00fcbrigen Angaben dieser Codezeile legen das Erscheinungsbild des Eingabefensters (Titel, H\u00f6he und Breite) sowie einen Standardwert (in diesem Fall <code>300<\/code>) fest. Wird die Eingabe abgebrochen, erscheint eine entsprechende Meldung, andernfalls wird gepr\u00fcft, ob die Eingabe numerisch war. Ist dies nicht der Fall, wird auch hier eine entsprechende Meldung ausgegeben und auf das Label <code>lAbfrage<\/code> zur\u00fcckverwiesen, sodass eine erneute Eingabe erfolgen kann. Wurde ein erlaubter Wert eingegeben, wird schlie\u00dflich <em>ImageMagick<\/em> aufgerufen und die getroffenen Optionen werden \u00fcbergeben. Nach kurzer Zeit &#8212; die genaue Dauer h\u00e4ngt von der Gr\u00f6\u00dfe der Ausgangsdatei ab &#8212; liegt das konvertierte Bild dann im gleichen Ordner wie das Original. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mal wieder was schnelles aus der Praxis: Bei meiner Arbeit ist es immer mal wieder erforderlich, Thumbnails &#8212; vor allem aus PDF-Dokumenten und gerne auch mal in verschiedenen Gr\u00f6\u00dfen &#8212; zu erstellen. Der herk\u00f6mmliche Arbeitsprozess sah dann bislang so aus, die Datei mit Photoshop oder Acrobat Pro zu \u00f6ffnen und von Hand bzw. per vordefinierter [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[19,73,87],"class_list":["post-542","post","type-post","status-publish","format-standard","hentry","category-technik-it","tag-aotohotkey","tag-imagemagick","tag-kommandozeile","post-preview"],"_links":{"self":[{"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/posts\/542","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/comments?post=542"}],"version-history":[{"count":0,"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/posts\/542\/revisions"}],"wp:attachment":[{"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/media?parent=542"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/categories?post=542"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/tags?post=542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}