0

我有一个奇怪的问题,我知道没有一个 java 专家可以解决..

我需要在我的应用程序上使用 imagemagick 将我网站上的电子邮件转换为图像,这样没有锅可以轻松接收电子邮件.. 使用 image magick 命令行解决的问题如下 convert -size 200x30 xc:transparent -font /home/ emad/TITUSCBZ.TTF -fill black -pointsize 12 -draw "text 5,15 'emadhegab@hotmail.com'" /home/emad/test.png

它真的像魔术一样工作,所以我试图把它放在java上用 Runtime.getRuntime().exec(command) 运行它,但结果令人失望..我现在有图像作为输出..但没有文本在里面..我做了一个系统来查看命令,然后将输出的命令放在终端中并且它起作用了..所以运行时中的问题有些如何..java的代码是..以防万一问

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

            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");
    }

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

它会给你空白图像..有没有人有解决方案

4

4 回答 4

2

您需要传递命令,它的 args 作为字符串数组,而不是字符串连接。

String[] cmd = {"convert",  "-size", "size", "c:white", ..., path +"/test.jpg"};
于 2010-01-27T15:26:16.273 回答
1

这对我有用:

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());

请注意,我从绘图部分取下了单引号。

于 2010-01-28T11:03:20.483 回答
0

这个 java 程序是由您运行还是由 Web 服务器运行?

因为如果是后者,很可能属性 user.home 没有你期望的值。

此外,位置 (300, 300) 和字体位置 (/tmp/TITUSCBZ.TTF) 与您首先给出的示例不同。也许你应该仔细检查一下。

于 2010-01-27T15:26:21.560 回答
0

你应该:

  1. 创建一个读取进程输出的线程。也许你的进程的应答的(平台相关的)缓冲区填满了(JVM 可能会死锁)。

  2. 也许java找不到“转换”命令......使用“exec”的重载版本,它将当前目录作为参数(http://java.sun.com/j2se/1.4.2/docs/api/java /lang/Runtime.html#exec(java.lang.String,%20java.lang.String[],%20java.io.File )

于 2010-01-27T15:26:34.010 回答