在 Xcode 中,如何以编程方式从 .icns 文件中提取 .png 图像?

Posted

技术标签:

【中文标题】在 Xcode 中,如何以编程方式从 .icns 文件中提取 .png 图像?【英文标题】:In Xcode, how do I extract .png image from an .icns file programmatically? 【发布时间】:2014-07-04 05:40:50 【问题描述】:

ios7 和 Xcode 的初学者。如果我理解得很好,.icns 文件是一个容器而不是图像。它包含不同尺寸和不同扩展名(例如 png、jpg)的图标和可能的其他内容。对还是错?

如果是这样,有没有办法从这个文件中提取 512x512.png 版本的图标?有人告诉我必须使用 NSdata 来获取 .icns 文件的内容,然后将其子串化以获取图像数据。但我不知道 512x512.png 的代码块从哪里开始到哪里结束?

我希望我的问题是正确的。我是新手。

感谢您的帮助

【问题讨论】:

曾经使用过***:en.wikipedia.org/wiki/Apple_Icon_Image_format? 感谢您的意见。事实上,我之前已经咨询过建议的 Wikipedia 页面。但是,根据该文件,似乎包含许多可变长度(字节)的图像。因此,如果我要选择一个图像(让我们以 ic09 为例),我将不知道块的开始在哪里,因为事先还有其他可变长度的图像。如果所有图像都是固定长度的,则很容易访问预期的图像。作为一个新手恐怕没有帮助。 【参考方案1】:

我没有准备好任何代码(尽管您可能想查看libicns)。

基本上,您必须按顺序读取文件内容。首先,您阅读标题(8 个字节)。然后在标题之后,您逐个阅读图标。每个图标以包含类型和长度的 8 字节标题开头。您阅读类型和长度,如果类型不匹配,则跳过图标并继续下一个。

找到所需的图标后,您可以提取它。它在长度字段之后开始,长度为 length - 8 个字节(长度包括仅 icns 文件格式需要的标头)。

请注意,长度以最高有效位在前(大端)存储,但 iOS 是小端。所以你需要转换数字。

图标类型可以被视为四个字符的字符串(没有尾随零)或无符号的 4 字节数字。一些编译器可以将'ic09' 视为无符号整数常量(注意单引号与字符串的双引号)。

【讨论】:

以上是关于在 Xcode 中,如何以编程方式从 .icns 文件中提取 .png 图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 XIB 文件的情况下以编程方式更新 Xcode 中的 UILabel?

如何以编程方式在 Xcode 中快速设置 UIPageViewController 的过渡样式?

Xcode - 我如何以编程方式在容器视图中嵌入/更改视图控制器?

如何使用 Swift 以编程方式创建 UILabel?

在 Objective-C Xcode 5 中以编程方式创建视图

如何在视图控制器中以编程方式切换视图? (Xcode,iPhone)