Advertisements

Automatisieren Sie die Bildverarbeitung mit diesem Bash-Skript

Schriftsteller arbeiten nicht nur mit Worten, sie müssen oft auch mit Bildern arbeiten. Beim Technical Writing werden viele Screenshots präsentiert, um die Technologie und Prozesse zu vermitteln. Unterschiedliche Veröffentlichungsplattformen können unterschiedliche Anforderungen an Bilder haben, z. B. das Bildformat oder die Dateigröße.

Als IT-Berater und System-Ingenieur habe ich viele technische Dokumentationen im Kundenauftrag verfasst, in der Regel mit Microsoft Word (.doc) als gefordertem Format. Jedes Dokument kann schnell wachsen, wenn Inhalte hinzugefügt werden. In der Anfangszeit waren Screenshots oft Bitmaps (.bmp), die eine sehr große Dateigröße haben können. Ein Dokument, das die Installation eines Betriebssystems auf einem Server beschreibt, kann eine sehr große Datei sein.

Die Bilder zu verkleinern, ohne sie unlesbar zu machen, war eine mühsame Aufgabe. Bitmaps können in JPEG-Dateien und später in PNG-Dateien konvertiert werden. Die Bearbeitung war auch später noch eine Herausforderung, als ich meine Office-Suite auf LibreOffice umstellte. Glücklicherweise speichern die meisten Screenshot-Tools heute in kleineren Formaten wie PNG.

Opensource.com setzt bestimmte Grenzen für Bilder, die in seinen Artikeln verwendet werden. Ich habe eine schnelle dreistufige Methode entwickelt, um Bilder für meine Artikel vorzubereiten. Der erste Schritt besteht darin, das Staging intelligent zu gestalten, z. B. die Größe eines Fensters zu ändern oder eine Schriftart zu ändern. Zwei zusätzliche Schritte wurden sehr repetitiv. Diese dienen dazu, sicherzustellen, dass das Bild die Breitengrenze von 600 Pixeln nicht überschreitet, und um einen Rahmen anzuwenden.

Das prepimg.sh-Skript

Ich habe ein Bash-Skript namens . geschrieben prepimg.sh diese Aufgaben zu bewältigen. Dieses Skript verwendet zwei Tools aus der ImageMagick-Suite.

Bildgröße ändern

Das Screenshot-Dienstprogramm speichert das Bild im Pictures Verzeichnis mit einem generischen Namen – so etwas wie Screenshot-20210923222312.png. Mein prepimg.sh script überprüft die Pixelbreite der Dateien in diesem Verzeichnis und passt die Größe aller Dateien an, die das Limit überschreiten. Dieser Schritt verwendet die identifizieren Programm aus der ImageMagick-Suite, um die Breite (%w) zu bestimmen.

$ identify -format %w Screenshot-20210903202655.png
1217

Der Breitenwert wird der Variablen zugewiesen W zur Verwendung als Komparator bis zur Grenze von 600. Die Grenze selbst ist über die Variable konfigurierbar $MAXWIDTH. Wenn festgestellt wird, dass die Breite MAXWIDTH überschreitet, wird ein anderes ImageMagick-Programm namens Konvertieren wird aufgerufen, um die Breite des Bildes zu reduzieren. Hier ist die Bildbearbeitungsfunktion aus meinem Skript:

     if [ "$W" -gt "$MAXWIDTH" ]
     then
         [[ $VERBOSE -gt 0 ]] && echo "${1} is ${W} - reducing"
         convert -resize "${MAXWIDTH}"
                 "${SCREENSHOTS}"/"${1}"
                 "${READY}"/"${1}"
     
     ...    

Das Bild wird bei Bedarf verkleinert und in einem anderen Verzeichnis gespeichert, das von der $READY Variable. In diesem Fall wird das Bild tatsächlich etwas kleiner – 598 Pixel – verkleinert, um Platz für das Hinzufügen eines Rahmens zu schaffen, den ich als Nächstes zeige.

Fügen Sie dem Bild einen Rahmen hinzu

Manchmal scheint ein Bild mit dem Hintergrund der Webseite zu verschmelzen. Dies liegt daran, dass die Vordergrundfarbe des Bildes bis zum Rand dieselbe Farbe wie der Hintergrund der Site hat. Hier ist ein Beispiel:

noborder_example.png

Ein Bild ohne Rand. (CC-BY-SA 4.0)

Wie Sie im obigen Bild sehen können, ist es unmöglich zu erkennen, wo sich der Rand des Bildes befindet. Dieses Problem ist nicht auf die Farbe Weiß beschränkt. Dies hängt von jeder einzelnen Site und den verwendeten Theme-Farben ab. Wenn also der Hintergrund rot ist und der Bildrand ebenfalls rot ist, tritt dasselbe Problem auf. Mein Skript löst dies, indem ich die Konvertieren Werkzeug. Die -Grenze Option fügt jeder Bilddatei mit einer Größe von 1 Pixel einen Rahmen hinzu. Diese Option allein würde ausreichen, aber ich möchte auch die Farbe mit dem einstellen -Randfarbe Möglichkeit. Hier ist ein Beispiel:

convert -bordercolor black -border 1 Screenshot-20210903202655.png

Unten ist das gleiche Bild mit einem Rand. Sieht das nicht schöner aus?

border_example.png

Bild mit Rahmen fügt sich nicht in den Hintergrund ein

Ein Bild mit einem Rand. (CC-BY-SA 4.0)

Dein Bild ist fertig

Ich benutze ein for Schleife, um das Screenshot-Verzeichnis zu durchlaufen. Es ruft die Funktion auf process_img für jede Datei. Die Funktion verarbeitet sowohl Breite als auch Rahmen. Der vollständige Code führt einige Plausibilitätsprüfungen durch, z. B. um sicherzustellen, dass die Datei tatsächlich ein Bild ist.

process_img() {
     # verify that file is an image file, and then get dimensions
     if file "${SCREENSHOTS}"/"${1}" | grep -qE 'image|bitmap'; then
         [[ $VERBOSE -gt 0 ]] && echo "${1} is an image"
         W=$(identify -format %w "${SCREENSHOTS}"/"${1}")
     else
         echo "File ${SCREENSHOTS}/${1} is not an image."
         W=0
     fi
 
     # resize and border
     if [ "$W" -gt "$MAXWIDTH" ]
     then
         [[ $VERBOSE -gt 0 ]] && echo "${1} is ${W} - reducing"
         convert -resize "${MAXWIDTH}"
                 -bordercolor $BORDER
                 -border 1
                 "${SCREENSHOTS}"/"${1}"
                 "${READY}"/"${1}"
     else
         convert -bordercolor $BORDER
                 -border 1
                 "${SCREENSHOTS}"/"${1}"
                 "${READY}"/"${1}"
     fi
 }

Der letzte Schritt des Skripts besteht darin, die verarbeiteten Dateien in einem Unterverzeichnis namens . zu speichern Ready, die durch die Variable namens . bestimmt wird $READY. Dadurch bleiben die Originaldateien für die weitere Verwendung erhalten.

Verwendungszweck

Prepimg.sh enthält die erwartete Hilfefunktion, die ihre Argumente und ihre Verwendung beschreibt:

$ prepimg.sh -h
prepimg.sh Version 0.7 - written by Alan Formy-Duval
prepimg.sh [OPTIONS]
--verbose, -v Be verbose
--directory, -d Screenshot directory (default: /home/alan/Pictures/Screenshots)
--ready, -r Ready directory (default: /home/alan/Pictures/Screenshots/Ready)
--border, -b Border color (default: black)

Code und Schlussfolgerung

Der im Artikel vorgestellte Code ist unvollständig und sollte als Pseudocode betrachtet werden. Sie können das vollständige Skript in meinem Git-Repository anzeigen.

Die ImageMagick-Suite ist ein leistungsstarker Satz von Werkzeugen zum Bearbeiten von Bildern. Sie können neben den Funktionen, die in meinem kleinen Skript enthalten sind, noch viele weitere Dinge tun. Korrespondent Jim Hall hat kürzlich auch darüber geschrieben, wie man damit die Größe eines Bildes ändert.

Egal, ob Sie Bash-Scripting oder Codierung in einer anderen Sprache wie C oder Python bevorzugen, Automatisierung ist eine große Hilfe. Immer wieder habe ich gesehen, wie ein bisschen Code so viele Kopfschmerzen lindern und es uns ermöglichen kann, unsere Zeit besser zu nutzen.

Automatisieren Sie die Bildverarbeitung mit diesem Bash-Skript

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to top