SteppingHat
SteppingHat

Reputation: 1362

PHP Test if Image is Interlaced

I have a folder that will consist of hundreds of PNG files and I want to write a script to make them all interlaced. Now, images will be added to that folder over time and processing all the images in the folder (wether their interlaced or progressive) seems kinda silly.

So I was wondering, is there any way to use PHP to detect if an image is interlaced or not that way I can choose wether to process it or not.

Thanks heaps!

Upvotes: 3

Views: 4564

Answers (2)

leonbloy
leonbloy

Reputation: 75906

You can also take the low-level approach - no need of loading the full image, or to use extra tools or libraries. If we look at the spec, we see that the "interlaced" flag it's just the byte 13 of the iHDR chunk, so we have to skip 8 bytes from the signature, plus 8 bytes of the iHDR Chunk identifier+length, plus 12 bytes of the chunk... That gives 28 bytes to be skipped, and if the next byte is 0 then the image is not interlaced.

The implementation takes just 4 lines of code:

function isInterlaced( $filename ) {
   $handle = fopen($filename, "r");
   $contents = fread($handle, 32);
   fclose($handle);
   return( ord($contents[28]) != 0 );
}

BTW, are you sure you want to use interlaced PNG? (see eg)

Upvotes: 11

napolux
napolux

Reputation: 16074

I think ImageMagick could solve your problem.

http://php.net/manual/en/imagick.identifyimage.php

Don't know if all the attributes are returned, but if you look at the ImageMagick tool documentation you can find that they can spot if an image is interlaced or not.

http://www.imagemagick.org/script/identify.php

At worst you can run the command for ImageMagick via PHP if the ImageMagick extension is not installed and parse the output for the "Interlace" parameter.

Upvotes: 0

Related Questions