Search code examples
javaimagemagickimagemagick-convertim4java

im4java convert using Pipes


I'm trying out im4java sample TestCase10 that deals with Pipes.

https://github.com/Widen/im4java/blob/master/src/org/im4java/test/TestCase10.java

 
public class im4Test {

    public static void main(String[] args) throws Exception {
        IMOperation op = new IMOperation();
        op.addImage("-");                   // read from stdin
        op.addImage("tif:-");               // write to stdout in tif-format

        // set up pipe(s): you can use one or two pipe objects
        FileInputStream fis = new FileInputStream("ABC.png");
        FileOutputStream fos = new FileOutputStream("ABC.tif");
        // Pipe pipe = new Pipe(fis,fos);
        Pipe pipeIn  = new Pipe(fis,null);
        Pipe pipeOut = new Pipe(null,fos);

        // set up command
        ConvertCmd convert = new ConvertCmd();
        convert.setInputProvider(pipeIn);
        convert.setOutputConsumer(pipeOut);
        convert.run(op);
        fis.close();
        fos.close();
    }
}

And facing below exception, any clue on what's happening is greatly appreciated.



        Exception in thread "main" org.im4java.core.CommandException: java.io.IOException: The pipe is being closed
        at org.im4java.core.ImageCommand.run(ImageCommand.java:219)
        at com.cvc.image.im4Test.main(im4Test.java:28)
    Caused by: java.io.IOException: The pipe is being closed
        at java.io.FileOutputStream.writeBytes(Native Method)
        at java.io.FileOutputStream.write(FileOutputStream.java:326)
        at java.io.BufferedOutputStream.write(BufferedOutputStream.java:122)
        at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
        at java.io.FilterOutputStream.close(FilterOutputStream.java:158)
        at org.im4java.process.ProcessStarter.processInput(ProcessStarter.java:261)
        at org.im4java.process.ProcessStarter.waitForProcess(ProcessStarter.java:423)
        at org.im4java.process.ProcessStarter.run(ProcessStarter.java:313)
        at org.im4java.core.ImageCommand.run(ImageCommand.java:215)
        ... 1 more

 

Note: Running on windows, and using ImageMagick.


Solution

  • Found the issue, on debugging further. Posting it as answer for the benefit of others.

    Windows platform has its own 'convert' command and it is interfering.

    Ecplise IDE is picking windows command, even though I made sure that ImageMagick 'convert' command is in the system path and accessible in command line and have restarted Eclipse.

    To make it work, had to explicitly set ImageMagick search path.

    ConvertCmd.setSearchPath('imageMagickBinDirPath')