2015-04-24 2 views
0

Я использую im4java версию 1.4.0 для доступа к функциям ImageMagick от Java. Он отлично работает для обработки изображений в и из файлов.Как получить im4java, работающий с BufferedImage

У Developers Guide есть раздел по использованию Буферизованных изображений вместо записи вывода в файл, и есть тест (TestCase13), демонстрирующий использование буферизованных изображений в качестве вывода. Однако, когда я запускаю какое-либо действие с помощью Буферизованного изображения, я получаю сообщение org.im4java.core.CommandException: no ImageReader for given format.

Я пробовал несколько разных вещей (включая добавление jai_imageio.jar для предоставления дополнительных форматов), но ничего не работает. Основной тест-кода, который показывает эту проблему (на основе TestCase13 im4java.jar), составляет:

@Test 
public void shouldWorkWithBufferedImageTest() throws InterruptedException, IOException, IM4JavaException { 
    ProcessStarter.setGlobalSearchPath("C:\\Program Files\\ImageMagick-6.8.9-Q8"); 
    String iImageDir = "C:\\images"; 

    String var1 = "png"; 
    IMOperation imOp = new IMOperation(); 
    imOp.addImage(new String[]{iImageDir + "sample-image=6.png"}); 
    imOp.blur(Double.valueOf(2.0D)).paint(Double.valueOf(10.0D)); 
    imOp.addImage(new String[]{var1 + ":-"}); 
    ConvertCmd convertCmd = new ConvertCmd(); 
    Stream2BufferedImage stream2BufferedImage = new Stream2BufferedImage(); 
    convertCmd.setOutputConsumer(stream2BufferedImage); 
    convertCmd.run(imOp, new Object[0]); 
    BufferedImage outImage = stream2BufferedImage.getImage(); 
    ImageIO.write(outImage, "PNG", new File(iImageDir + "tmpfile.png")); 
    DisplayCmd.show(iImageDir + "tmpfile.png"); 
} 

Запуск этого выдает следующее сообщение об ошибке:

org.im4java.core.CommandException: java.lang.IllegalStateException: no ImageReader for given format 
    at org.im4java.core.ImageCommand.run(ImageCommand.java:219) 
    at test.groovy.services.ImageManipulation.JavaBufferedImageManipulationTest.shouldWorkBufferedImageTest(JavaBufferedImageManipulationTest.java:31) 

Caused by: java.lang.IllegalStateException: no ImageReader for given format 
    at org.im4java.core.Stream2BufferedImage.consumeOutput(Stream2BufferedImage.java:82) 
    at org.im4java.process.ProcessStarter.processOutput(ProcessStarter.java:276) 
    at org.im4java.process.ProcessStarter.access$200(ProcessStarter.java:54) 
    at org.im4java.process.ProcessStarter$2.call(ProcessStarter.java:433) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.lang.Thread.run(Thread.java:745) 

ошибка происходит на convertCmd.run в строке, однако проблема, похоже, связана с установкой outputConsumer как stream2BufferedImage. Как это исправить? Есть ли известная ошибка с im4java и BufferedImages? Есть ли более эффективная работа, чем экспорт в временный файл, а затем чтение его обратно в BufferedImage? Я знаю JMagick (как альтернативу im4java), но не нашел это хорошим решением по другим причинам.

Заранее благодарим за любую помощь или идеи.

ответ

1

см. В этом примере У меня есть источник входного сигнала в качестве буферизированного изображения и вывода также является буферизованным изображением. Я надеюсь это тебе поможет.

public static void main(String... args) throws Exception { 
     IMOperation op = new IMOperation(); 
     op.addImage();      
     op.resize(350) 
     op.addImage("png:-")    
     BufferedImage images = ImageIO.read(new File("image.jpg")); 

     // set up command 
     ConvertCmd convert = new ConvertCmd(); 
     Stream2BufferedImage s2b = new Stream2BufferedImage(); 
     convert.setOutputConsumer(s2b); 

     // run command and extract BufferedImage from OutputConsumer 
     convert.run(op,images); 
     BufferedImage img = s2b.getImage(); 
    } 
Смежные вопросы