如何将 UIImage 转换为 NSData 或 CFDataRef?
Posted
技术标签:
【中文标题】如何将 UIImage 转换为 NSData 或 CFDataRef?【英文标题】:How do I convert a UIImage to NSData or CFDataRef? 【发布时间】:2011-10-31 01:03:27 【问题描述】:如何将UIImage
转换为NSData
或CFDataRef
?我需要将CFDataRef
传递给ABPersonSetImageData
。
【问题讨论】:
【参考方案1】:这对我有用,适用于 PNG 图像。对于其他图像类型,我假设您只需要找到相应的 UIImage...Representation 方法即可。
UIImage *image = [UIImage imageNamed:@"imageName.png"];
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)];
如果您需要 UIImage 的 CFDataRef,只需多一行。
CFDataRef imgDataRef = (CFDataRef)imageData;
【讨论】:
你为什么使用+[NSData dataWithData:]
?
触摸。我想你可以这样做NSData *imageData = UIImagePNGRepresentation(image);
【参考方案2】:
你可以用这个
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
只需将 imageData 转换为 CFDataRef
CFDataRef = (CFDataRef) imageData;
【讨论】:
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);很慢也相当于png方法。有什么快速的方法吗??????【参考方案3】:CFDataRef cfdata = CFDataCreate(NULL, [imageData bytes], [imageData length]);
点击here查看工作示例。
谢谢。
【讨论】:
【参考方案4】:对于那些想知道NSData
和CFData
有什么区别的人,这里是Apple Docs的解释:
CFData 与其 Cocoa Foundation 对应物“免费桥接”, NS 数据。这意味着核心基础类型是 与桥接的函数或方法调用可互换 基础对象。换句话说,在您看到 NSData 的方法中 * 参数,你可以传入一个 CFDataRef,在你看到 CFDataRef 参数的函数中,你可以传入一个 NSData 实例。这 也适用于 NSData 的具体子类。请参阅免费桥接 有关免费桥接的更多信息的类型。
这解释了为什么将 NSData
转换为 CFData
有效。
【讨论】:
以上是关于如何将 UIImage 转换为 NSData 或 CFDataRef?的主要内容,如果未能解决你的问题,请参考以下文章
将 UIImage 转换为 NSData 并在 Swift 中转换回 UIImage?
有啥方法可以在不将 CIImage 转换为 UIImage 或 CGImage 的情况下将 CIImage 转换为 NSData?