2010-06-04 71 views
2

我試圖讓ImageMagick從grails運行來轉換一些圖像,當我運行命令使圖像沒有任何反應時。我沒有任何錯誤,沒有任何信息沒有任何回報。我試着運行其他命令,比如touch和ps ux,只是爲了看看它們是否能夠正常工作,而且都能正常工作。它看起來像imagemagick命令迷路了,我不知道該怎麼做。這是我一直在使用的代碼。ImageMagick和Grails不工作

String command = CH.config.ImageMagickPath + "/convert -size 40x20 xc:red xc:blue -append -rotate 90 append_rotate.gif" 
println command 
command.execute() 

CH.config.ImageMagickPath設置爲imagemagick/bin所在的位置。我採取了
println命令
中顯示的內容,並在終端中運行它,它工作正常。我有什麼理由不能使用IM來從Grails工作?


好吧,我用純Java編寫它,現在我得到這個錯誤:

使dyld:庫未加載:/ImageMagick-6.6.1/lib/libMagickCore.3.dylib 從參考:/Library/ImageMagick/bin/convert 原因是:image not found

+0

在轉換之前是否有空間丟失? – ataylor 2010-06-04 06:15:38

回答

0

我建議使用JMagick這是一個JNI封裝imagemagick庫。它也會比調用execute()更有效率。

1

我剛剛做了相當類似的事情:

def convert = ["/usr/bin/convert","/opt/local/bin/convert"].find({ new File(it as String).exists() }) 
File thumbnail = new File(f.getParentFile(),FilenameUtils.getBaseName(f.getName()) + ".thumbnail.png") 
ProcessBuilder pb = new ProcessBuilder() 
     .command(convert, f.getName(), "-thumbnail", "128x128>","-bordercolor","snow","-background","black", "-polaroid", "0", thumbnail.getName()) 
     .directory(f.getParentFile()); 

int result = pb.start().waitFor() 

if(result != 0){ 
    throw new ImageMagickException("thumbnail generation failured, return code:" + result); 
} 

這是一個有點冗長(Java是方式在我腦海中根深蒂固的),但它確實工作。

請注意,String.execute返回一個過程對象,您需要在檢查任何生成的文件之前調用waitFor()或不要。另外請確保你檢查從這個返回代碼看,因爲這會給你一個暗示出了什麼問題。

+0

所以我嘗試過使用Java的方式,並試圖製作一個腳本,它將運行ImageMagick,然後只是返回文本。 Grails執行腳本並從腳本獲取文本,但imagemagick仍然沒有產生任何東西,雖然它看起來像被稱爲它只是沒有做任何事情。作爲一個測試,我把我的腳本,並運行它和一個簡單的groovy控制檯腳本,它的工作。從grails運行,沒有任何!我現在完全失去了。 – TripWired 2010-06-07 19:08:01

+0

這種東西可以是非常令人沮喪的。只有幾件事情值得思考。首先檢查你正在傳遞的文件的路徑,當前目錄幾乎肯定不在你認爲的位置,然後在'grails console'命令中運行這個命令,這裏有grails env,以防萬一這會破壞某些東西爲你(它可能不是)。給IM一個非常大的圖片,然後看看你是否可以在任務管理器中看到該進程,只是爲了檢查它是否正在運行,我們是否可以procexp來檢查它已打開的文件 – 2010-06-07 20:35:23

+0

因此,我剛剛發現我正在使用你在上面分享的代碼是什麼意思? – TripWired 2010-06-07 22:44:21