Pregunta

Tengo un problema un poco extraño que ningún experto en Java que conozco podría resolver.

Necesito usar imagemagick en mi aplicación para convertir los correos electrónicos de mi sitio web en imágenes para que nadie pueda recibir los correos electrónicos fácilmente.el problema se resolvió con la línea de comando image magick de la siguiente maneraconvertir -tamaño 200x30 xc:transparent -font /home/emad/TITUSCBZ.TTF -relleno negro -pointsize 12 -draw "text 5,15 'emadhegab@hotmail.com'" /home/emad/test.png

Y realmente funciona como la magia, así que traté de poner eso en el Java para ejecutarlo con Runtime.getRuntime (). Exec (comando) Pero el resultado es lamentablemente decepcionante ...Ahora tengo una imagen como salida... pero sin texto dentro...Hice una salida del sistema para ver el comando y tomé el comando que salió y lo puse en la terminal y funcionó... así que el problema en el tiempo de ejecución de alguna manera...el codigo de java es..en caso de que estés preguntando

=================

            String size = ("1000x1030");

    String path = System.getProperty("user.home");
    String command="convert -size "+ size +" xc:white -font /tmp/TITUSCBZ.TTF -pointsize 12 -draw 'text 300,300 \"emadhegab@hotmail.com\"' "+path +"/test.jpg";
    try{
    Process proc =Runtime.getRuntime().exec(command);

    System.out.println(command);
    }catch(Exception e){
        System.out.println("error");
    }

=================

te dará una imagen en blanco..¿Alguien tiene una solución?

¿Fue útil?

Solución

Esto funciona para mí:

String size = "1024x768";
ProcessBuilder pb = new ProcessBuilder("convert", "-size", size,
        "xc:white", "-font",
        "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf",
        "-pointsize", "12", "-draw",
        "text 300,300 \"*****@hotmail.com\"",
        "/home/djo/Pictures/rainy.jpeg");
pb.redirectErrorStream(true);

Process p = pb.start();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while((line=br.readLine())!=null){
    System.out.println(line);
}
System.out.println(p.waitFor());

Tenga en cuenta que me quité las comillas simples de la parte sorteo.

Otros consejos

Tiene que pasar el comando y de args como una matriz de cadenas, no es una concatenación de cadenas.

String[] cmd = {"convert",  "-size", "size", "c:white", ..., path +"/test.jpg"};

¿Es este programa Java se ejecutan por usted o por el servidor web?

Porque si es esto último, lo más probable es que el user.home propiedad no tiene el valor que espera.

Además, la posición (300, 300) y la ubicación de la fuente (/tmp/TITUSCBZ.TTF) son diferentes que en el ejemplo que da primero. Tal vez usted debe doblar a comprobar eso.

Usted debe:

  1. Crea un hilo que lee la salida del proceso. Tal vez el (depende de la plataforma) para amortiguar el answere de su proceso se llena (la JVM puede producir un bloqueo muerto a continuación).

  2. Tal vez java no pudo encontrar el comando "convertir" ... utilizar una versión sobrecargada de "ejecutivo" que tiene un directorio actual como parámetro ( http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#exec(java.lang.String,%20java.lang.String[],%20java.io. archivo )

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top