2008-10-13 12 views
5

Breve:ImageMagick Reflexión

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

¿Cómo cambio el comando anterior ImageMagick por lo que toma la anchura y la altura de una imagen existente? Necesito que siga siendo un comando de una línea.


Detalles:

estoy tratando de crear mediante programación un reflejo de imagen utilizando ImageMagick. El efecto que estoy buscando es similar a lo que verías al mirar un objeto en el borde de un charco de agua. Hay un hilo bastante bueno en lo que trato de hacer here pero la solución no es exactamente lo que estoy buscando. Como llamaré a ImageMagick desde una aplicación C# .Net, quiero usar una llamada sin ningún archivo temporal y devolver la imagen a través de stdout. Hasta ahora tengo este ...

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 

Esto funciona bien, pero no me da el fundido exacta Busco. En lugar de un buen desvanecimiento sólido de arriba a abajo, me está desvaneciendo desde la parte superior izquierda hasta la parte inferior derecha. Agregué la sección (-negativo -evaluar multiplique 0.3 -negado) para aclararlo un poco más ya que no estaba obteniendo el fundido que quería. Tampoco quiero tener que codificar el tamaño de la imagen al crear el degradado (gradiente de tamaño 585x128). También voy a querer mantener la transparencia de la imagen original si es posible.

Para ir a la salida estándar planeo en sustitución de "NewImage.png" con "-"

+0

puedo responder a esto cuando llegue a casa esta noche. Comentando para poder encontrar la pregunta nuevamente en mi página de usuario. – Sparr

+0

No puse esto en una respuesta porque no aborda directamente las limitaciones que expresaste, pero creo que es información útil (especialmente en un contexto orientado a * nix): http://blogs.sun.com/constantin/ entry/presenting_images_and_screenshots_the – micahwittman

+0

Solo como referencia, aquí hay un script PHP que utiliza la biblioteca GD para hacer lo que creo que desea: http://reflection.corephp.co.uk – leek

Respuesta

1

Si llama desde C#, tal vez usted podría conseguir recuperar las dimensiones de la imagen en C#. luego llamar al comando de ImageMagick con

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

Prefiero no tener que hacer una llamada por separado a obtener el tamaño de la imagen. Como ImageMagick tendrá cargada la imagen, esperaba poder reutilizar la información de tamaño. –

0

Debe tomar la imagen existente como una entrada, y crear el gradiente de sí mismo utilizando -fx lugar de utilizar el pseudo-formato de gradiente.

-1

Puede ser que esto puede ayudar: 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