给定UIImage
/ NSImage
或NSData
实例,如何找出以编程方式 PNG是8位还是24位?如果它具有Alpha通道?
是否有任何可可/ Cocoa Touch API对此有所帮助?
为了避免重复,这里是问题的non-programatic answer,这是找出if an image is a PNG的方法。
作为在J2ME平台上进行长时间编程的人,我非常了解PNG格式。如果您将原始数据作为NSData
实例,则由于PNG格式非常简单,因此查找信息非常容易。
PNG文件以签名开头,然后包含一系列块。您只对第一个块IHDR
感兴趣。
因此,代码应遵循以下原则:
宽度:4个字节高度:4个字节位深度:1个字节颜色类型:1个字节压缩方式:1字节筛选方法:1个字节隔行方法:1个字节
对于Alpha,您还应该检查文件中是否存在tRNS
(透明度)块。要查找块,可以使用以下算法:
编辑:
要查找有关UIImage
实例的信息,请获取其CGImage
并使用CGImageGet...
函数之一。应该注意的是,PNG文件中的All整数值是以Big-endian格式读取的。