繁体   English   中英

如何使im4java与BufferedImage一起使用

[英]How to get im4java working with BufferedImage

我正在使用im4java版本1.4.0从Java访问ImageMagick功能。 它非常适合处理文件之间的图像。

开发人员指南中有一节介绍了如何使用缓冲图像而不是将输出写入文件,并且有一个测试(TestCase13)演示了如何使用缓冲图像作为输出。 但是,当我对Buffered Image运行任何操作时,会收到org.im4java.core.CommandException声明: no ImageReader for given format

我尝试了许多不同的方法(包括添加jai_imageio.jar以提供其他格式),但是似乎没有任何效果。 展示该问题的基本测试代码(基于im4java.jar的TestCase13)是:

@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的替代品),但是由于其他原因,还没有发现这是一个好的解决方案。

预先感谢您的协助或想法。

在本示例中,我将输入源作为缓冲图像,而输出也作为缓冲图像。 希望对您有所帮助。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM