2011-02-10 55 views
5

Tôi đang sử dụng công cụ chuyển đổi của ImageMagick để chuyển đổi hình ảnh từ trong chương trình Java của tôi chạy trên Mac OS X. Tôi đang sử dụng mã sau, mà tôi đã thích nghi từ here.ImageMagick chuyển đổi trạng thái thoát 133

public static void convertToJPG(String originalFile, String newFile) throws Exception { 
    executeCommand("/usr/local/ImageMagick-6.6.7/bin/convert", originalFile, newFile); 
} 

private static void executeCommand(String... command) throws Exception { 
    ProcessBuilder pb = new ProcessBuilder(command); 
    pb.redirectErrorStream(true); 
    Process p = pb.start(); 
    int exitStatus = p.waitFor(); 
    System.out.println(exitStatus); 
    if(exitStatus != 0) 
     throw new Exception("Error converting image."); 
} 

Tuy nhiên, khi tôi làm điều này, tôi nhận được một trạng thái thoát của và thông báo lỗi dưới đây. Tôi giả định rằng điều này có một cái gì đó để làm với các điều khoản, như khi tôi chạy lệnh tương tự từ thiết bị đầu cuối, nó hoạt động tốt.

Thông báo lỗi:

dyld: Library not loaded: /ImageMagick-6.6.7/lib/libMagickCore.4.dylib 
    Referenced from: /usr/local/ImageMagick-6.6.7/bin/convert 
    Reason: image not found 

Edit: Ok, vì vậy nó quay ra rằng tôi đã nhận được thông báo lỗi trên do Java không thể thấy biến DYLD_LIBRARY_PATH môi trường. Vì vậy, tôi khởi động lại Eclipse và mọi thứ đã hoạt động.

Trả lời

3

Mặc dù tôi không thể tìm thấy bất kỳ điều gì về mã trả về 133, tôi đã nhận thấy rằng bạn không đọc luồng lỗi tiêu chuẩn ra/tiêu chuẩn của lệnh. Tôi khuyên bạn nên đọc để xem liệu ImageMagick có đem lại cho bạn một số đầu ra hữu ích hơn không. Có một câu hỏi here đề cập đến các trường hợp sử dụng phức tạp hơn của phương thức Runtime.exec(), nhưng cách cơ bản tốt nhất để làm điều đó là with this method.

+0

Chà, điều đó có ý nghĩa hoàn hảo, không thể tin rằng tôi không nghĩ về nó. Cảm ơn bạn! Tôi sẽ cố gắng hôm nay. – DanielGibbs

+0

Ah-ha! Bây giờ tôi có một thông báo lỗi! Cập nhật ở trên. – DanielGibbs

0

Bạn nên cân nhắc sử dụng jmagick cung cấp API Java cho thư viện hình ảnh gốc. Nó hiệu quả hơn việc tạo ra các quy trình mới từ ứng dụng Java của bạn.

+0

Tôi đã xem xét điều đó, nhưng tôi đọc ở đâu đó rằng nếu tôi không sử dụng ImageMagick nhiều (trong trường hợp của tôi, chỉ có một hoặc hai lệnh chuyển đổi), thì sẽ dễ dàng hơn khi thực hiện theo cách này. – DanielGibbs

Các vấn đề liên quan