2008-10-13 19 views
5

Brief:ImageMagick Reflexion

convert (-size 585x128 gradient:) NewImage.png 

Wie kann ich die oben ImageMagick Befehl ändern, so dass es die Breite und Höhe aus einem vorhandenen Bild nimmt? Ich brauche es, um ein einzeiliger Befehl zu bleiben.


Details:

Ich versuche, ein Bild Reflexion mit ImageMagick programmatisch zu erstellen. Der Effekt, nach dem ich suche, ähnelt dem, was Sie sehen würden, wenn Sie ein Objekt am Rand eines Wasserbeckens betrachten. Es gibt einen ziemlich guten Thread auf was ich versuche zu tun here aber die Lösung ist nicht genau das, was ich suche. Da ich ImageMagick aus einer C# .Net-Anwendung aufrufen werde, möchte ich einen Aufruf ohne temporäre Dateien verwenden und das Bild durch stdout zurückgeben. Bisher habe ich diese ...

convert OriginalImage.png (OriginalImage.png -flip -blur 3x5 \ 
    -crop 100%%x30%%+0+0 -negate -evaluate multiply 0.3 \ 
    -negate (-size 585x128 gradient:) +matte -compose copy_opacity -composite) 
    -append NewImage.png 

Dies funktioniert ok, aber nicht geben Sie mir die genaue verblassen die ich suche. Statt einer schönen, soliden Fade von oben nach unten, gibt es mir eine Fade von oben links nach unten rechts. Ich fügte den Abschnitt (-negieren - multiplizieren 0.3 -negieren bewerten) hinzu, um es ein bisschen mehr aufzuhellen, da ich nicht das verblassen bekam, das ich wollte. Ich möchte auch nicht die Größe des Bildes fest einprogrammieren müssen, wenn ich den Farbverlauf erzeuge (-size 585x128 gradient:) Ich werde auch die Transparenz des Originalbildes beibehalten, wenn möglich.

Um zu stdout gehe ich zu ersetzen „NewImage.png“ mit Plan „-“

+0

Das kann ich antworten, wenn ich nach Hause an diesem Abend bekommen. Kommentieren, damit ich die Frage auf meiner Benutzerseite wiederfinden kann. – Sparr

+0

Ich habe dies nicht in einer Antwort, weil es nicht direkt die Einschränkungen angesprochen, die Sie zum Ausdruck gebracht, aber ich denke, es ist nützlich Info (vor allem in einem * nix orientierten Kontext): http://blogs.sun.com/constantin/ entry/presending_images_and_screenshots_the – micahwittman

+0

Nur zur Referenz, hier ist ein PHP-Skript, das die GD-Bibliothek verwendet, um zu tun, was ich glaube, dass Sie wollen: http://reflection.corephp.co.uk – leek

Antwort

1

Wenn Sie es von C# anrufen, vielleicht könnten Sie die Bildabmessungen in C# abrufen bekommen. Dann den Befehl ImageMagick rufen mit

command = String.Format("convert bar %1x%2",img.Width,img.Height) 
+0

Ich würde lieber nicht zu einem separaten Aufruf zu müssen bekomme die Bildgröße. Da ImageMagick das Bild geladen hat, hoffte ich, die Größeninformationen wiederverwenden zu können. –

0

Sie sollten das vorhandene Bild als Eingabe verwenden, und erstellen Sie den Gradienten selbst mit -fx anstelle des Gradienten pseudo-Format zu verwenden.

-1

Kann dies helfen kann: Reflection under an image

#!/bin/sh 

gamma=$1 
source=$2 
destination=$3 
size=`identify -format "%wx%h" $source` 

convert $source \ 
    \(-size $size xc:none \ 
    \(\(-flip $source -crop $size+0+0 \) \ 
    -size $size gradient: -gamma $gamma \ 
    -compose copy_opacity -composite \) \ 
    -compose blend -composite \) \ 
    -append $destination