使用 Imagemagick 进行 Java 处理
我想调整图像大小,例如:convert 1.jpg -resize 250x240> 1.jpg 我写了一些这样的代码:
File f=new File(request.getRealPath("/")+"pics/"+d.getTime()+"_"+ttt+suffix);
StringBuffer sb=new StringBuffer();
sb.append("'convert "+f.getAbsolutePath()+" -resize 250x240\\> "+f.getAbsolutePath()+"'");
String command=sb.toString();
Process p=Runtime.getRuntime().exec(command);
int returnv=p.waitFor();
System.out.println("command:"+command+" returnV:"+returnv);
但我发现,当我添加“>”时标记它,命令失败。我该如何解决这个问题?
I want to resize a image, for example: convert 1.jpg -resize 250x240> 1.jpg
I write some code like this:
File f=new File(request.getRealPath("/")+"pics/"+d.getTime()+"_"+ttt+suffix);
StringBuffer sb=new StringBuffer();
sb.append("'convert "+f.getAbsolutePath()+" -resize 250x240\\> "+f.getAbsolutePath()+"'");
String command=sb.toString();
Process p=Runtime.getRuntime().exec(command);
int returnv=p.waitFor();
System.out.println("command:"+command+" returnV:"+returnv);
but I found that, when I add the '>' flag to it, the command fails. How can I solve this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
考虑使用 im4java,它是 ImageMagic 命令行工具的面向对象的 java 包装器。它准确地解决了您所面临的问题。
JMagic 是另一种选择。它在 ImageMagic C-API 周围提供了一个薄 JNI 层。
Consider using im4java which is a object oriented java wrapper around the ImageMagic command line tools. It solves exactly those problems that you are facing.
JMagic is another alternativ. It provides a thin JNI layer around the ImageMagic C-API.
>
字符不是转换命令的标志,而是将输出重定向到文件1.jpg
。您可以仅使用输出文件参数调用convert
并避免重定向。而不是:使用
顺便说一句,您正在转义反斜杠
-resize 250x240\\>
,也许这不是必需的,您可以简单地编写-resize 250x240 >
。更新:也许您可以使用 JMagick(ImageMagick 的 Java 库),而不是执行系统进程来转换图像。
The
>
character is no flag to the convert command but a redirection of the output into the file1.jpg
. You could just callconvert
with an output file parameter and avoid the redirection. Instead of:use
BTW, you are escaping you backslashes
-resize 250x240\\>
, maybe this is not necessary and you could simply write-resize 250x240 >
.Update: Maybe you could use JMagick, a Java library for ImageMagick, instead of executing a system process to convert your image.
运行时不会启动成熟的 shell。您当然可以调用 bash 来获取一个。
或者您可以创建一个线程来驻留在进程输出流上并将其写入输出文件。
Runtime doesn't fire up a fully-fledged shell. You can of course invoke bash to get one.
Or you can create a thread to sit on the process output stream and write it to an output file.