1

Java からImageMagick機能にアクセスするためにim4javaバージョン 1.4.0 を使用しています。ファイルとの間で画像を処理するのにうまく機能しています。

開発者ガイドには、出力をファイルに書き込む代わりにバッファ画像を使用するセクションがあり、バッファ画像を出力として使用する方法を示すテスト (TestCase13) があります。ただし、バッファリングされたイメージでアクションを実行すると、次のように表示され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 の代替として) を知っていますが、他の理由でこれが良い解決策であるとは思いませんでした。

事前に、支援やアイデアをありがとう。

4

1 に答える 1

4

この例では、入力ソースが buffered Image であり、出力も buffered image です。これがお役に立てば幸いです。

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();
    }
于 2015-09-24T09:54:53.173 に答える