我该如何将UIImage
转换为NSData
或CFDataRef
? 我需要传递一个CFDataRef
给ABPersonSetImageData
函数。
对我而言,这在PNG图像上起作用。对于其他类型的图像,我认为你只需找到相应的UIImage...Representation方法即可。
UIImage *image = [UIImage imageNamed:@"imageName.png"];
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)];
如果您需要一个UIImage的CFDataRef,只需要再添加一行代码即可。
CFDataRef imgDataRef = (CFDataRef)imageData;
您可以使用这个
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
只需要将 imageData 转换为 CFDataRef
即可。
CFDataRef = (CFDataRef) imageData;
对于那些想知道NSData
和CFData
之间的区别的人,这里是Apple Docs的解释:
CFData与其Cocoa Foundation对应类型NSData是“toll-free bridged”(无缝桥接)的。这意味着核心基础库类型可以在功能或方法调用中与被桥接的Foundation对象互换使用。换句话说,在您看到NSData *参数的方法中,您可以传递CFDataRef,并且在您看到CFDataRef参数的函数中,您可以传递NSData实例。这也适用于NSData的具体子类。有关无缝桥接的更多信息,请参见无缝桥接类型。
这就解释了为什么可以将NSData
转换为CFData
的原因。
+[NSData dataWithData:]
? - Jacob RelkinNSData *imageData = UIImagePNGRepresentation(image);
这个操作就可以了。” - Jared Egan