IOS:从照片路径获取 NSData

Posted

技术标签:

【中文标题】IOS:从照片路径获取 NSData【英文标题】:IOS: Get NSData from Photos path 【发布时间】:2013-09-04 06:18:36 【问题描述】:

我有一组来自照片库的图像路径。我需要通过我的 Facebook 应用发布这些照片。但我收到错误 324,“需要上传文件”。我认为我从路径获取 NSData 的方式是错误的。有什么帮助吗?

NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString: URLImages[i]]];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                               messageTextView.text, @"message", imageData, @"source", nil];

但是当我在项目中对图像进行硬编码时,它可以工作

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"IMAG0386" ofType:@"jpg"];
NSData *imageData = [NSData dataWithContentsOfFile:filePath];
    mosaicShareImages[i]]];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                               messageTextView.text, @"message", imageData, @"source", nil];

【问题讨论】:

【参考方案1】:

如果您尝试访问资产库 URL(以 assets-library:// 开头),NSData 方法 dataWithContentsOfURL: 将失败并返回 nil。此方法没有访问与资产 URL 相关的图像所需的权限。要从资产库中读取,您需要使用 ALAssetsLibrary's

- (void)assetForURL:(NSURL *)assetURL 
        resultBlock:(ALAssetsLibraryAssetForURLResultBlock)resultBlock 
        failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock

方法。如您所见,API 将失败和成功的块作为参数。此方法是异步的,因为可能需要要求用户授予对数据的访问权限。

更多关于 API from Apple docs

当请求资产时,可能会要求用户确认应用程序对库的访问;但是,该方法会立即返回。您应该对 resultBlock 中的资产执行任何您想要的工作。 如果用户拒绝访问应用程序,或者不允许任何应用程序访问数据,则调用失败块。

如何使用这个 API 可以在这个答案中找到。 https://***.com/a/13523463/1407017

希望有帮助!

【讨论】:

【参考方案2】:

在代码中尝试这种更改:

NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@",URLImages[i]]]];

【讨论】:

【参考方案3】:

如果您的数组 URLImages[i] 包含图像文件的绝对路径,那么您需要使用[NSURL fileURLWithPath:],如下所示:

NSData *imageData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath: URLImages[i]]];

【讨论】:

【参考方案4】:
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",URLImages]];

NSLog(@"%@",url);

NSData *data = [[NSData alloc]initWithContentsOfURL:url];

UIImage * img=[UIImage imageWithData:data];

ImgView.image=img;

试试这个..

【讨论】:

同样的错误,和 url 打印一样。 assets-library://asset/asset.JPG?id=F30FFA87-C329-4C21-AA00-0FF3A985A2A1&ext=JPG

以上是关于IOS:从照片路径获取 NSData的主要内容,如果未能解决你的问题,请参考以下文章

如何从 iOS 照片库中获取图像并在 UIWebView 中显示

iOS NSData与其他类型互转

获取 PHAsset 的本地文件路径

按位置从 iOS 照片库中获取照片

如何不从照片库 iOS 中获取屏幕截图

从 iOS 照片库 uri 中获取 base64 照片