我有一个奇怪的问题,我知道没有java专家可以解决..
我需要在我的应用程序上使用imagemagick将我网站上的电子邮件转换为图像,这样就没有底池可以轻松收集电子邮件了...问题解决了图像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(命令) 但结果令人遗憾地失望..我现在有图像作为输出..但内部没有文字..我做了一个sys出来看到命令并采取了outed的命令,并把它放在终端,它工作..所以运行时的问题有些如何.. 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");
}
=================
它会给你空白的图片..任何人都有解决方案
答案 0 :(得分:2)
你需要传递命令,它的args是一个String数组,而不是String连接。
String[] cmd = {"convert", "-size", "size", "c:white", ..., path +"/test.jpg"};
答案 1 :(得分:0)
这个java程序是由您运行还是由Web服务器运行?
因为如果是后者,很可能属性user.home没有你期望的值。
此外,位置(300,300)和字体位置(/tmp/TITUSCBZ.TTF)与您首先给出的示例不同。也许你应该仔细检查一下。
答案 2 :(得分:0)
你应该:
创建一个读取进程输出的线程。也许你的进程回答的(平台相关的)缓冲区填满了(JVM可能会死锁)。
也许java找不到“转换”命令...使用重载版本的“exec”,它将当前dir作为参数(http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#exec(java.lang.String,%20java.lang.String[],%20java.io.File)
答案 3 :(得分:0)
这对我有用:
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());
请注意,我从绘图部分取下了单引号。