PHAssetCreationRequest DNG文件名

时间:2018-03-16 22:09:05

标签: ios swift xcode filenames phphotolibrary

这是Apple的示例代码 AVCamManualExtendingAVCamtoUseManualCaptureAPI 的片段,其中必须将DNG数据写入文件,然后再转移到 PHPhotoLibrary

[PHPhotoLibrary requestAuthorization:^( PHAuthorizationStatus status ) {  
  if ( status == PHAuthorizationStatusAuthorized ) {  

  NSURL *temporaryDNGFileURL;  
  if ( self.dngPhotoData ) {  
   temporaryDNGFileURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%lld.dng", resolvedSettings.uniqueID]]];  
   [self.dngPhotoData writeToURL:temporaryDNGFileURL atomically:YES];  
  }  

  [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{  
   PHAssetCreationRequest *creationRequest = [PHAssetCreationRequest creationRequestForAsset];  

   if ( self.jpegPhotoData ) {  
    [creationRequest addResourceWithType:PHAssetResourceTypePhoto data:self.jpegPhotoData options:nil];  

    if ( temporaryDNGFileURL ) {  
     PHAssetResourceCreationOptions *companionDNGResourceOptions = [[PHAssetResourceCreationOptions alloc] init];  
     companionDNGResourceOptions.shouldMoveFile = YES;  
     [creationRequest addResourceWithType:PHAssetResourceTypeAlternatePhoto fileURL:temporaryDNGFileURL options:companionDNGResourceOptions];  
    }  
   }  
   else {  
    PHAssetResourceCreationOptions *dngResourceOptions = [[PHAssetResourceCreationOptions alloc] init];  
    dngResourceOptions.shouldMoveFile = YES;  
    [creationRequest addResourceWithType:PHAssetResourceTypePhoto fileURL:temporaryDNGFileURL options:dngResourceOptions];  
   }  

  } completionHandler:^( BOOL success, NSError * _Nullable error ) {  
   if ( ! success ) {  
   NSLog( @"Error occurred while saving photo to photo library: %@", error );  
   }  

   if ( [[NSFileManager defaultManager] fileExistsAtPath:temporaryDNGFileURL.path] ) {  
   [[NSFileManager defaultManager] removeItemAtURL:temporaryDNGFileURL error:nil];  
   }  

   [self didFinish];  
  }];  
  }  
  else {  
   NSLog( @"Not authorized to save photo" );  
   [self didFinish];  
  }  
 }];  

在上面的代码中,该行使用 resolvedSettings.uniqueID 创建DNG文件名:

 temporaryDNGFileURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%lld.dng", resolvedSettings.uniqueID]]];

上面一行创建一个名为23lld.dng的文件。当用户想要连续文件名以及照片库中的JPEG和其他资产文件名时,这就成了一个问题。

如果用户上次资产的文件名为 IMG_0155.jpg ,则在这种情况下,正在创建的DNG文件应为 IMG_0156.dng

我如何才能获得DNG文件的正确名称?

我遇到了值得注意的API:

  • PHAssetResourceCreationOptions
  • PHAssetResourceCreationOptions.originalFilename
  • PHAssetResourceCreationOptions.uniformTypeIdentifier
  • PHAssetChangeRequest.placeholderForCreatedAsset

不知怎的,我把所有人绑在一起想出一个解决方案。

0 个答案:

没有答案