Wie fügt man einem Bild über CLI Schlagschatten hinzu?

Ich habe eine Reihe von Bildern (meistens Screenshots, aber das spielt keine Rolle), denen ich einen Schlagschatten hinzufügen möchte . (Der Grund dafür ist, einen schönen Rand hinzuzufügen, da sie einen weißen Hintergrund haben und ich sie auf einem weißen Hintergrund verwende.)

Mein aktueller Arbeitsablauf ist:

  • Öffnen Sie die .pngDatei in Inkscape,
  • Filters/Shadow and glow/Drop shadow,
  • Wählen Sie einen 3pxUnschärferadius mit einem 2px 2pxVersatz,
  • Exportieren Sie die geänderte .png.

Dies geschieht jedoch alles manuell… und es ist ziemlich ärgerlich, wenn ich mehr als… 2 Bilder habe.

Ich weiß, dass Inkscape mit der Befehlszeilenschnittstelle (CLI) verwendet werden kann (ich bin auf Ubuntu 18.04). Ich weiß, wie man Dateien importiert und exportiert. Allerdings weiß ich nicht, wie man einen bestimmten Filter anwendet.

Folgendes habe ich versucht, es hat nicht funktioniert:

$ inkscape --verb org.inkscape.effect.filter.ColorDropShadow --verb FileSave --verb FileClose image.png

Können Sie mir daher sagen, wie man einem Bild mit CLI Schlagschatten hinzufügt?
(Dies kann entweder mit Inkscape oder einer anderen Open-Source-Software unter Linux erfolgen.)

Mein aktueller Fortschritt bisher: $ inkscape --verb org.inkscape.effect.filter.ColorDropShadow --verb FileSave --verb FileClose image.pngaber es funktioniert nicht.
Sie könnten mehr aus Ihrem cmd herausholen, wenn Sie stattdessen imagamagick verwenden
Sie müssen nach PNG exportieren, nicht speichern.
Für dieses Verb wird eine GUI benötigt, wie die Textausgabe sagt:WARNING: ignoring verb org.inkscape.effect.filter.ColorDropShadow - GUI required for this verb.
... und außerdem müssen Sie ein Objekt auswählen, bevor Sie einen Filter darauf anwenden können.
Die Kommentare zur GUI sind ... nicht korrekt. Es erfordert eine GUI, aber mit der .noprefs-Version des Verbs ist keine Benutzereingabe erforderlich. Ja, Inkscape wird geöffnet, aber das Skript wird weiterhin ausgeführt.
Um dies richtig zu machen, muss Ihr Skript also: die Datei öffnen, alles darin auswählen, den noprefs-Schlagschattenfilter anwenden und dann das ausgewählte Objekt als Ganzes nach PNG exportieren (der Filter vergrößert es, also wird der Seitenbereich exportiert nicht arbeiten).
@Moini Danke! Ich werde es mit deinen Kommentaren versuchen.

Antworten (2)

Anstatt das Vektorgrafik-Tool Inkscape zu verwenden, würde ich das ultimative Befehlszeilen-Tool für Bitmap-Manipulationen empfehlen: ImageMagick .

Es sollte über Ihre Distributions-Repositories verfügbar sein. Dieses Tool enthält viele Effekte, einschließlich der Erzeugung eines Schlagschattens.

Dies geschieht grundsätzlich mit der convert -shadowOption, allerdings müssen Sie dann das generierte Hintergrundbild wieder mit dem Original kombinieren. Dies kann alles in einem einzeiligen Befehl mit der -layers mergeOption:

convert input.jpg \( +clone -background black -shadow 50x10+15+15 \) +swap -background none -layers merge +repage shadow.png

Nützliche Optionen für den Schlagschatten werden mit -background <color>und bestimmt -shadow percent-opacity{xsigma}{+-}x{+-}y{%}. Das obige Beispiel erzeugt einen grauen Schlagschatten mit 50 % Deckkraft, 10 % Größe und x=+15 % y=+15 % Versatz:

Geben Sie hier die Bildbeschreibung ein

Quelle der obigen Informationen und weitere Optionen und verschiedene Schattentypen finden Sie unter:

Das ist genau das, was ich brauche – das Aktivieren von Schlagschatteneinstellungen als CLI-Argument ist ein echtes Plus. Danke!

Basierend auf der Antwort von Takkat ist hier die Bash-Funktion, die ich meiner hinzugefügt habe .bashrc:

function dropshadow () {
    filename=$(basename -- "$1")
    # extension="${filename##*.}"
    basename="${filename%.*}"
    # we want to enforce png (even if .jpg as input)
    suffix="_shadow.png"
    convert "$1" \( +clone -background black -shadow 50x10+5+5 \) +swap -background none -layers merge +repage "$basename$suffix"
}
  • Verwendung : dropshadow <yourfile.ext>,
  • Ausgabe : erstellt <yourfile>_shadow.pngin Ihrem aktuellen Arbeitsverzeichnis.