【发布时间】:2013-12-20 15:49:25
【问题描述】:
我正在尝试将 UIImage 转换为 NSData,然后将 NSData 转换为 Base64 字符串。
这是我处理图像的方法:
- (void)processImage:(UIImage*)image{
dispatch_queue_t myQueue = dispatch_queue_create("My Queue",NULL);
[self.spinnerOutlet setAlpha:0.0f];
[self.spinnerOutlet startAnimating];
dispatch_async(myQueue, ^{
NSData *myData = nil;
myData = UIImagePNGRepresentation(image);
float sysVer = [[[UIDevice currentDevice] systemVersion] floatValue];
if (sysVer >= 7.00) {
// Convert image
myData = [UIImagePNGRepresentation(image) base64EncodedDataWithOptions:NSDataBase64Encoding64CharacterLineLength];
}
NSString *myString = [NSString stringWithUTF8String:[myData bytes]];
snapShotInBase64 = myString;
NSLog(@"Snapshot in base64 string: %@", myString);
dispatch_async(dispatch_get_main_queue(), ^{
// BACK TO THE UI THREAD
[self showSuccessAlertView:@"Great" message:@"Sending Image..."];
isProcessingImage = NO;
[self sendImagePostRequest];
});
});
}
问题是 NSLog 返回 null!
NSLog(@"Snapshot in base64 string: %@", myString);
【问题讨论】:
-
你做了什么调试?存在什么?你在哪个版本的 iOS 上运行?
-
为什么你认为保存图片的NSData可以转换成UTF8Encoded字符串呢?该 NSData 可以在数据中的任何位置有一个空字符,从而结束字符串并释放剩余的内存。这是一个非常糟糕的技术。我不确定为什么您需要图像中的 64 位字符串,但您可以查看此链接以了解 64 位 NSData 编码:github.com/l4u/NSData-Base64
-
找到了类似的解决方案。见下文:D