如何将UIImage转换为NSData或CFDataRef?

11

我该如何将UIImage转换为NSDataCFDataRef? 我需要传递一个CFDataRefABPersonSetImageData函数。

4个回答

22

对我而言,这在PNG图像上起作用。对于其他类型的图像,我认为你只需找到相应的UIImage...Representation方法即可。

UIImage *image = [UIImage imageNamed:@"imageName.png"];
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)];

如果您需要一个UIImage的CFDataRef,只需要再添加一行代码即可。

CFDataRef imgDataRef = (CFDataRef)imageData;

2
你为什么要使用 +[NSData dataWithData:] - Jacob Relkin
5
好的,我会尽力进行翻译。这句话的意思是:“说得对。我想你只需要执行 NSData *imageData = UIImagePNGRepresentation(image); 这个操作就可以了。” - Jared Egan

7

您可以使用这个

NSData *imageData = UIImageJPEGRepresentation(image, 1.0);

只需要将 imageData 转换为 CFDataRef 即可。

CFDataRef = (CFDataRef) imageData;

NSData *imageData = UIImageJPEGRepresentation(image, 1.0); 这句代码非常慢,同样适用于png方法。有没有更快的方式? - user2128531

3
CFDataRef cfdata = CFDataCreate(NULL, [imageData bytes], [imageData length]);

点击此处查看一个工作示例。

谢谢。


0

对于那些想知道NSDataCFData之间的区别的人,这里是Apple Docs的解释:

CFData与其Cocoa Foundation对应类型NSData是“toll-free bridged”(无缝桥接)的。这意味着核心基础库类型可以在功能或方法调用中与被桥接的Foundation对象互换使用。换句话说,在您看到NSData *参数的方法中,您可以传递CFDataRef,并且在您看到CFDataRef参数的函数中,您可以传递NSData实例。这也适用于NSData的具体子类。有关无缝桥接的更多信息,请参见无缝桥接类型。

这就解释了为什么可以将NSData转换为CFData的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接