如何将UIImage
转换为NSData
或CFDataRef
?我需要将CFDataRef
传递给ABPersonSetImageData
。
答案 0 :(得分:19)
这对我来说对于PNG图像很有用。对于其他图像类型,我假设您只需要找到相应的UIImage ...表示方法。
UIImage *image = [UIImage imageNamed:@"imageName.png"];
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)];
如果你需要一个用于UIImage的CFDataRef,它只是一行。
CFDataRef imgDataRef = (CFDataRef)imageData;
答案 1 :(得分:7)
你可以用这个
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
并简单地将imageData转换为CFDataRef
CFDataRef = (CFDataRef) imageData;
答案 2 :(得分:1)
答案 3 :(得分:0)
对于那些想知道 NSData
和 CFData
之间有什么区别的人,这里是 Apple Docs 的解释:
CFData 与 Cocoa Foundation 的同行“免费桥接”, NSData。这意味着核心基础类型是 可在函数或方法调用中与桥接互换 基金会对象。换句话说,在您看到 NSData 的方法中 * 参数,您可以传入一个 CFDataRef,并且在您看到 CFDataRef 参数的函数中,您可以传入一个 NSData 实例。这 也适用于 NSData 的具体子类。请参阅免费桥接 有关免费桥接的详细信息的类型。
这解释了为什么将 NSData
转换为 CFData
有效。