Getting Improper image header error in ImageMagick 7.0.7

I am running ImageMagick on Mac OS High Sierra

The following commands work fine with ImageMagick 6.9.0

convert -define stream:buffer-size=0 png:- png:- -alpha off -compose copy-opacity -composite png:- 
compare -define stream:buffer-size=0 -fuzz 17% -metric AE png:- png:- png:-

I updated ImageMagick 6.9.0 to ImageMagick 7.0.7-28 then both of these commands started failing with the below error messages

magick -define stream:buffer-size=0 png:- png:- -alpha off -compose copy-opacity -composite png:-
magick: improper image header `/var/folders/tb/11n2czg57ts9dzxypdsmlqk99c46m9/T/magick-26635byT1dtHsAuT3' @ error/png.c/ReadPNGImage/4231.

magick compare -define stream:buffer-size=0 -fuzz 17% -metric AE png:- png:- png:- 
For input string: "compare: improper image header `/var/folders/tb/11n2czg57ts9dzxypdsmlqk99c46m9/T/magick-26363xwcFdjrv3CT0' @ error/png.c/ReadPNGImage/4231."

Can you please guide me what I have to change in those commands?

If I store png files in a temporary folder and run the above commands by replacing png:- with temporary file path then both the commands run fine. But I want the commands to work with InputStream.

Thanks in advance!

1 answer

  • answered 2018-04-17 08:23 Mark Setchell

    I'm not sure you can stream two PNG files concatenated together as PNGs into ImageMagick's input stream. Essentially, you are trying to do this:

    { convert xc:red png:- ; convert xc:blue png:- ; } | convert png:- png:- -append result.png
    

    which doesn't work, because, I think, the final convert will read the entire input stream when it encounters the first png:- and there will be nothing left for the second png:-.

    I think the only safe way to send multiple concatenated images through a single channel is by using the MIFF "Magic Image File Format" which does support multiple images:

    { convert xc:red miff:- ; convert xc:blue miff:- ; } | convert miff:- -append result.png