gpt4 book ai didi

ios - 查看 PNG 是 8 位还是 24 位和 alpha

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:47:00 27 4
gpt4 key购买 nike

给定一个 UIImage/NSImageNSData 实例,您如何以编程方式找出 PNG 是否是8 位还是 24 位?如果它有一个 alpha channel ?

是否有任何 Cocoa/Cocoa Touch API 对此有帮助?

为避免重复,这里是 non-programatic answer对于这个问题,这里有一种方法可以找出 if an image is a PNG .

最佳答案

作为一个长期在J2ME平台上编程的人,我对PNG格式非常了解。如果您将原始数据作为 NSData 实例,则查找信息非常容易,因为 PNG 格式非常简单。

参见 PNG Specification

PNG 文件以签名开头,然后包含一系列 block 。您只对第一个 block IHDR 感兴趣。

所以,代码应该是这样的:

  1. 跳过前 8 个字节(签名)
  2. 跳过 4 个字节(IHDR block 长度)
  3. 跳过 4 个字节(IHDR block 类型 = "IHDR")
  4. 阅读国际人类发展报告

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

对于 alpha,您还应该检查文件中是否有 tRNS(透明度) block 。要找到一个 block ,您可以使用以下算法:

  1. 读取 block 长度(4字节)
  2. 读取 block 类型(4字节)
  3. 检查chunk类型是否是我们要找的类型
  4. 跳过 block 长度字节
  5. 跳过 4 个字节的 CRC
  6. 重复

编辑:

要查找有关 UIImage 实例的信息,请获取其 CGImage 并使用其中一个 CGImageGet... 函数。应该注意的是,PNG 文件中的所有 整数值均以Big-endian 格式读取。

关于ios - 查看 PNG 是 8 位还是 24 位和 alpha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16081966/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com