2008-10-13 4 views
5

Brève:ImageMagick Réflexion

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

Comment puis-je changer la commande ci-dessus ImageMagick il prend la largeur et la hauteur d'une image existante? J'en ai besoin pour rester une commande d'une ligne.


Détails:

Je suis en train de créer une réflexion programatically image à l'aide ImageMagick. L'effet que je cherche est similaire à ce que vous verriez en regardant un objet sur le bord d'un bassin d'eau. Il ya un très bon fil sur ce que j'essaie de faire here mais la solution n'est pas exactement ce que je cherche. Comme je vais appeler ImageMagick à partir d'une application C# .Net, je veux utiliser un appel sans aucun fichier temporaire et renvoyer l'image via stdout. Jusqu'à présent j'ai ceci ...

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 

Cela fonctionne bien mais ne me donne pas le fondu exact que je cherche. Au lieu d'un beau fondu solide de haut en bas, il me donne un fondu de haut en bas à gauche. J'ai ajouté la section (-negate -evaluate multiplier 0.3 -negate) pour l'alléger un peu plus puisque je n'obtenais pas le fondu que je voulais. Je ne veux pas non plus avoir à coder en dur la taille de l'image lors de la création du dégradé (-size 585x128 gradient:) Je vais aussi vouloir conserver la transparence de l'image originale si possible.

Pour aller à stdout Je prévois remplacer « NewImage.png » par « - »

+0

Je peux répondre quand je rentre à la maison ce soir. Commenter pour que je puisse retrouver la question sur ma page d'utilisateur. – Sparr

+0

Je n'ai pas mis cela dans une réponse car elle ne répond pas directement aux contraintes que vous avez exprimées, mais je pense que c'est une information utile (surtout dans un contexte orienté * nix): http://blogs.sun.com/constantin/ entry/presenting_images_and_screenshots_the – micahwittman

+0

Juste pour référence, voici un script PHP qui utilise la bibliothèque GD pour faire ce que je crois que vous voulez: http://reflection.corephp.co.uk – leek

Répondre

1

Si vous appelez à partir de C#, vous pourriez peut-être obtenir récupérer les dimensions de l'image en C#. appeler ensuite la commande ImageMagick avec

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

Je préfère ne pas avoir à faire un appel séparé à obtenir la taille de l'image. Comme ImageMagick aura l'image chargée, j'espérais être en mesure de réutiliser les informations de taille. –

0

Vous devez prendre l'image existante en entrée, et de créer vous-même en utilisant un gradient -fx au lieu d'utiliser le pseudo format dégradé.

-1

Peut être que cela peut aider: 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