ios - 从 iOS 照片库 uri 获取 base64 照片

标签 ios objective-c react-native

我正在 React Native 中构建一个应用程序,我需要使用照片 uri(例如 photos://A2B9B28B-9A3E- 4190-BCA0-B11F1E587085/L0/002)。我最初使用 Assets 库,但我更新了我的应用程序以使用新的照片库,但我正在努力让它工作。

我的旧资源库方法是:

{
  NSURL *url = [[NSURL alloc] initWithString:input];
  ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
  [library assetForURL:url resultBlock:^(ALAsset *asset) {
    ALAssetRepresentation *rep = [asset defaultRepresentation];
    CGImageRef imageRef = [rep fullScreenImage];
    NSData *imageData = UIImagePNGRepresentation([UIImage imageWithCGImage:imageRef]);
    NSString *base64Encoded = [imageData base64EncodedStringWithOptions:0];
    callback(@[[NSNull null], base64Encoded]);
  } failureBlock:^(NSError *error) {
    NSLog(@"that didn't work %@", error);
    callback(@[error]);
  }];
}

最佳答案

它与您已有的代码基本相同,只是被拆分成了两部分。首先得到一个PHAsset使用 id,然后使用 PHImageManager 从该 Assets 中获取图像.

  • 获取PHAsset从图书馆使用

[+ (PHFetchResult<PHAsset *> *)fetchAssetsWithALAssetURLs:(NSArray<NSURL *> *)assetURLs options:(nullable PHFetchOptions *)options;

这个方法是同步的,立即返回一个 PHAsset 的数组但这些 Assets 不包含任何图像数据。

  • 下次使用

[PHImageManager defaultManager]获取图像。这是异步的,就像 ALAssetsLibrary 方法一样。使用 - (PHImageRequestID)requestImageDataForAsset:(PHAsset *)asset options:(PHImageRequestOptions *)options resultHandler:(void (^)(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info))resultHandler;

代码应该是这样的(显然你必须为你的应用程序填写你的错误代码和错误域):

PHFetchResult* results = [PHAsset fetchAssetsWithLocalIdentifiers:@[input] options:nil];
PHAsset *asset = [results firstObject];
if (asset) {
    [[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
        if (imageData){
            NSString *base64Encoded = [imageData base64EncodedStringWithOptions:0];
            callback(@[[NSNull null], base64Encoded]);
        }else{
            NSError* error = info[PHImageErrorKey];
            if (!error) {
                error = [NSError errorWithDomain:@"" code:-1 userInfo:@{NSLocalizedDescriptionKey:@"image not found"}];
            }
            callback(nil, error);

        }
    }];
}else{
    NSError* error = [NSError errorWithDomain:@"" code:-1 userInfo:@{NSLocalizedDescriptionKey:@"asset not found"}];
    callback(nil, error);
}

关于ios - 从 iOS 照片库 uri 获取 base64 照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43968082/

相关文章:

ios - 如何从 Dynamic NSMutableArray 添加坐标到 CLLocationCoordinate2D?

javascript - require() 不适用于变量 - react native

javascript - 如何将 Prop 传递给 Redux Form 中的 onSubmitSuccess 回调?

ios - NSJSONSerialization 不将数据存储到数组中

ios - 如何测试位标记的所有字段是否存在于另一个位掩码中?

ios - 如何在不删除 ios Objective C 中的某些字符的情况下编辑 uitextfield

javascript - 将图像路径转换为 ​​blob react native

iphone - 如何从现有图像和其上的字符串创建新图像

ios - UIImageView 上的手势识别器(滑动)

ios - 如何让 iOS Build 文件夹不影响最终应用程序的大小?