2016-11-05 3 views
1

Ich möchte einen kombinierten Befehl, der die folgende Aufgabe in Einzelausführung ausführen kann. Ich durchsuchte das Internet, fand aber kaum ein Tutorial, das uns zum Schreiben eines Stack-Kommandos führte. Ich kann einzigen Befehl für jede Operation, wie -composite, -blur, etc gefunden, und ich weiß, ich kann Rohr den Befehl als solchePraktische Imagemagick Stapel (kombiniert) komplexe Befehle

convert ... mpr:- | convert ... mpr:- | ... | convert ... png:- 

Allerdings möchte ich einen kombinierten Befehl, \(... \) und mpr:{label} da diese verwenden wird zunehmen die Leistung, da alle Operationen in einem einzigen Prozess ausgeführt werden (die Pipeline in der Shell kann die Leistung beeinträchtigen und die Prozesssequenz muss in Ordnung sein).

enter image description here

Der Prozessablauf als solche:

  1. flower.png der oben setzen frame.png ->mpr:framedFlower
  2. setzen mpr:framedFlower auf dem background.png ->mpr:out2
  3. Unschärfe der heart.png , rechts-gradient-transparent die smiley.png und legen beide Bilder oben auf mpr:out2 ->mpr:out3
  4. annotate die mpr:out3 mit „Hallo Welt“ (Platzierung = unten) -> png: -

    ich nicht enthalten die Befehle, die ich versucht habe, weil sie zu unübersichtlich sind, und es wird eine Beleidigung für die Benutzer, die es lesen. Ich habe es viele Stunden lang versucht, aber ich kann es nicht schaffen. Bitte beraten.

Antwort

1

Ich habe nicht Alter verbrachte mit den genauen Koordinaten futzing wie ich nur Beispielbilder verwendet werde, aber dieser Einzeiler enthält jede Technik, die Sie tun müssen, was Sie fordern.

Es ist im Grunde eine Zeile Code pro Element im endgültigen Bild:

convert frame.png -resize 500x400\! \(flower.png -resize 400x300\! \) -gravity center -composite \ 
    background.png +swap -gravity northwest -geometry +100+150 -composite \ 
    \(heart.png -resize 200x200 -blur 0x8 \) -geometry +1200+250 -composite \ 
    -gravity south -pointsize 72 -fill red -annotate +0+60 'Hello world' \ 
    \(emoji.png -resize 250x250 -channel a -fx "u.a*(1-(i/w))" \) -gravity northwest -geometry +1200+500 -composite result.png 

enter image description here

Die erste Zeile liest in dem Bilderrahmen und die Blumen und die Größe sie jeweils unabhängig voneinander wegen der Klammern und verbindet dann die Blume in den Rahmen.

Die nächste Zeile lädt den Hintergrund und verwendet dann +swap es hinter das gerahmte Bild von der vorherigen Spiel zu setzen. Es setzt dann -gravity nach Nordwesten als Ursprung für das folgende -geometry vor dem Zusammensetzen des gerahmten Bildes auf den Hintergrund.

Die nächste Zeile lädt das Herz und ändert die Größe und verwischt nur das Herz, bevor Sie das auf das Hauptbild an Ihrer angegebenen Position zusammensetzen.

Als nächstes ist die Anmerkung - die einzige interessante Sache ist, dass ich die -geometry-south gesetzt, was bedeutet, dass die Offsets zu -annotate bis unten in der Mitte des Hintergrunds relativ sind.

Schließlich lade ich das Emoji-Ding und Größe nur in Klammern, bevor Sie über das Hauptbild komponieren. Die einzige interessante Sache ist, dass ich -fx verwende, um den Alpha-Kanal zu ändern (-channel a) und ich multipliziere die vorhandene Transparenz (u.a) mit dem Bruchteil der Umkehrung der Entfernung, die wir über das Bild sind, nämlich (1-(i/w)).

Hoffe, das ist ziemlich klar!

starten Bilder

enter image description here

enter image description here

enter image description here

enter image description here

+0

Danke, ich versuchte es und es funktioniert. Zuerst habe ich versucht, 'frame.png flower.png -composite -write mpr: a \ \ (background.png mpr: a -composite-write mpr: b \) \ \ (mpr: b heart.png -composite - schreibe mpr: c \) .... png: -' und es bleibt schief. Aus Ihrer Antwort habe ich festgestellt, dass wir das Bild im ** Bildstapel ** zusammensetzen können, anstatt "mpr: {label}" zu verwenden. Sorry für meine späte Antwort, ich verbringe viel Zeit, um diese Tutorials noch einmal zu lesen. Ich werde eine Aufwertung geben, wenn ich genug Ansehen habe, danke. –