As a person who programmed for a long time on a J2ME platform, I know the PNG format very well. If you have the raw data as a NSData
instance, looking up the information is very easy since the PNG format is very straightforward.
See PNG Specification
The PNG file starts with a signature and then it contains a sequence of chunks. You are interested only in the first chunk, IHDR
.
So, the code should be along the lines of:
- Skip the first 8 bytes (signature)
- Skip 4 bytes (IHDR chunk length)
- Skip 4 bytes (IHDR chunk type = "IHDR")
- Read IHDR
Width: 4 bytes
Height: 4 bytes
Bit depth: 1 byte
Color type: 1 byte
Compression method: 1 byte
Filter method: 1 byte
Interlace method: 1 byte
For alpha, you should also check if there is a tRNS
(transparency) chunk in the file. To find a chunk, you can go with the following algorithm:
- Read chunk length (4 bytes)
- Read chunk type (4 bytes)
- Check chunk type whether it is the type we are looking for
- Skip chunk length bytes
- Skip 4 bytes of CRC
- Repeat
EDIT:
To find info about a UIImage
instance, get its CGImage
and use one of the CGImageGet...
functions.
It should be noted that All integer values in a PNG file are read in Big-endian format.