我创建了一个应用程序来使用 ALAssetLibrary 从 iPhone 照片文件夹中获取图像。我可以在不使用定位服务的情况下使用 AlAssetLibrary 检索文件吗?如何避免 AlAssetLibrary 中的定位服务?
问问题
780 次
2 回答
3
目前,不使用位置服务无法访问 ALAssetLibrary。你必须使用更有限的 UIImagePickerController 来解决这个问题。
于 2011-04-19T03:17:19.103 回答
1
如果您只需要库中的一张图片,则上述答案不正确。例如,如果您让用户选择要上传的照片。在这种情况下,您可以使用 ALAssetLibrary 获取该单个图像,而无需位置权限。
为此,请使用 UIImagePickerController 选择图片;你只需要UIImagePickerControllerReferenceURL
UIImagePickerController 提供的 。
这样做的好处是让您可以访问未修改的NSData
对象,然后您可以上传该对象。
这很有帮助,因为稍后使用重新编码图像UIImagePNGRepresentation()
或UIImageJPEGRepresentation()
可以使文件大小加倍!
展示选择器:
picker = [[UIImagePickerController alloc] init];
[picker setDelegate:self];
[picker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
[self presentViewController:picker animated:YES completion:nil];
要获取图像和/或数据:
- (void)imagePickerController:(UIImagePickerController *)thePicker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[picker dismissViewControllerAnimated:YES completion:nil];
NSURL *imageURL = [info objectForKey:@"UIImagePickerControllerReferenceURL"];
ALAssetsLibrary *assetLibrary=[[ALAssetsLibrary alloc] init];
[assetLibrary assetForURL:imageURL
resultBlock:^(ALAsset *asset) {
// get your NSData, UIImage, or whatever here
ALAssetRepresentation *rep = [self defaultRepresentation];
UIImage *image = [UIImage imageWithCGImage:[rep fullScreenImage]];
Byte *buffer = (Byte*)malloc(rep.size);
NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:rep.size error:nil];
NSData *data = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES];
if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
}
}
failureBlock:^(NSError *err) {
// Something went wrong; get the image the old-fashioned way
// (You'll need to re-encode the NSData if you ever upload the image)
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
}
}];
}
于 2013-02-07T01:27:05.023 回答