【发布时间】:2012-10-15 17:55:30
【问题描述】:
我能否在不使用[UIImage imageWithContentsOfFile:]; 的情况下获取存储为 NSData 的 UIImage 的大小 (CGSize)?能够做到这一点将使我的代码运行得更快。
【问题讨论】:
标签: objective-c ios cocoa-touch uiimage nsdata
我能否在不使用[UIImage imageWithContentsOfFile:]; 的情况下获取存储为 NSData 的 UIImage 的大小 (CGSize)?能够做到这一点将使我的代码运行得更快。
【问题讨论】:
标签: objective-c ios cocoa-touch uiimage nsdata
CoreGraphics 或 UIKit 不会。您需要检查二进制流。幸运的是,它之前已经在许多其他语言中完成过。一个快速的谷歌在 Ruby 中找到了this implementation,它确定文件类型(jpg、bmp、png 和 gif)并提取图像的尺寸。应该很容易使用 NSData 转换为 Objective-C。从parse_size函数开始。
【讨论】:
存储为 NSData 的图像可以是任意数量的格式,例如 png、jpg、tiff、gif、raw 等。当您只有一个字节时,它不是 UIImage。所以一般来说,你无法确定存储为 NSData 对象的图像的大小。
如果您可以保证您的每张 NSData 图像都以相同的格式(例如 PNG)存储,那么您可以根据 PNG 数据文件格式扫描 NData 以获取大小信息。这可能比从数据创建 UIImage 更有效。但显然这需要更多的工作。
【讨论】:
您可能会发现有用的CGImageSource API。 Ole Begemann 在这个话题上有一个很棒的tutorial。
【讨论】:
保存时将大小信息写入某种数据库。
要获取磁盘上文件的大小,可以使用NSFileManager attributesOfItemAtPath:error:
【讨论】: