2011-04-02 50 views
0

Java進程我想調整大小的圖像,例如:轉換1.JPG調整大小250x240> 1.JPG 我寫一些像這樣的代碼:與ImageMagick的

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

,但我發現,當我添加'>'標誌,命令失敗。我該如何解決這個問題?

回答

0

>字符不是轉換命令的標誌,而是將輸出重定向到文件1.jpg。您可以使用輸出文件參數調用convert並避免重定向。相反的:

convert 1.jpg -resize 250x240> 1.jpg 

使用

convert -resize 250x240 1.jpg 1_resized.jpg 

順便說一句,你逃避你反斜槓-resize 250x240\\>,也許這是沒有必要的,你可以簡單地寫-resize 250x240 >

更新:也許你可以使用JMagick,ImageMagick的Java庫,而不是執行系統進程來轉換你的圖像。

+0

只縮小圖像('>'標誌) 另一個常用的選項是限制即時消息,以便它只會縮小圖像以符合給定的大小。永不放大。這是'>'調整大小選項。想象一下,僅將圖像大小調整爲大於給定大小的圖像(其直觀的一點點)。 – areslp 2011-04-02 18:32:15

+0

你是對的,我不需要添加\\>它,只需250x240>是好的,樣品在http://www.imagemagick.org/Usage/resize/#shrink:convert dragon.gif-resize 64x64 \> exact_dragon.gif,\>是逃避它吧? – areslp 2011-04-02 18:33:48

+0

對不起,錯過了(自己在某個時候使用過這個標誌,但不記得)。雙反斜槓是必要的還是足夠的?我想反斜槓只與執行​​的shell有關,所以它理解'''是字符,而不是重定向。 – 2011-04-02 18:37:03

0

運行時不啓動完全成熟的外殼。你當然可以調用bash來獲得一個。

或者您可以創建一個線程來坐在流程輸出流上並將其寫入輸出文件。

1

考慮使用im4java這是一個面向對象的java包裝ImageMagic命令行工具。它解決了你正面臨的那些問題。

JMagic是另一種替代。它在ImageMagic C-API周圍提供了一個精簡的JNI層。