Unable to get File name of image captured with camera

耗尽温柔 提交于 2020-01-13 15:02:18

问题


I'm trying to build an app in which I'm able to capture image with camera and save to gallery. But I'm unable to get the file name of image. If I select image from camera roll, then I'm able to get file name of selected image.But when I capture image with camera in my app, It returns file name "null". Here is my code to save and select image from gallery using UIImagePickerController

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{

    UIImage *chosenImage = [self scaleAndRotateImage:[info valueForKey:UIImagePickerControllerOriginalImage]];
    NSString *mediaType = info[UIImagePickerControllerMediaType];
       self.userProfileImage.image = chosenImage;

    if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
        UIImage *image = info[UIImagePickerControllerOriginalImage];

        if (newMedia)
            UIImageWriteToSavedPhotosAlbum(image,
                                           self,
                                           @selector(image:finishedSavingWithError:contextInfo:),
                                           nil);
    }

    imageRotation=[NSString stringWithFormat:@"%f %f %f",acos (self.userProfileImage.transform.a), asin (self.userProfileImage.transform.b), atan2(self.userProfileImage.transform.b, self.userProfileImage.transform.a)];
    CGFloat angle = [(NSNumber *)[self.userProfileImage valueForKeyPath:@"layer.transform.rotation.z"] floatValue];
    NSLog(@"%f", angle);

    NSURL *referenceURL = [info objectForKey:UIImagePickerControllerReferenceURL];
    ALAssetsLibrary *assetLibrary = [ALAssetsLibrary new];

    [assetLibrary assetForURL:referenceURL
                  resultBlock:^(ALAsset *asset) {
                      ALAssetRepresentation *assetRep = [asset defaultRepresentation];
                     fileName = [assetRep filename];
                      NSLog(@"File name = %@", fileName);    
                  }

                 failureBlock:^(NSError *error) {
                     NSLog(@"%@", error);
                 }];

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
    [picker dismissViewControllerAnimated:YES completion:nil];
    imageChanged=TRUE;
}

And this code to save captured image

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
    UIAlertView *alert;
    //NSLog(@"Image:%@", image);
      if (error) {
        alert = [[UIAlertView alloc] initWithTitle:@"Error!"
                                           message:[error localizedDescription]
                                          delegate:nil
                                 cancelButtonTitle:@"OK"
                                 otherButtonTitles:nil];
        [alert show];

    }
}

I'm stuck at the point that how can I get file name of captured image. What wrong I'm doing in my code ? Please suggest me any correction or solution. Any help would be appreciated . Thanks in advance


回答1:


Here is how I get file name of a file, video or photo, which picked with UIImagePickerController:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    @try {
        self.myinfo = info;
        DDLogDebug(@"MediaListView - Dismissing camera ui...");
        [self.cameraUI dismissViewControllerAnimated:YES completion:nil];

        mediaURL = [info objectForKey:UIImagePickerControllerMediaURL];
        DDLogDebug(@"MediaListView - Media url = %@", mediaURL);

        NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
        DDLogDebug(@"MediaListView - Selected mediaType: %@", mediaType);

        // This is a video
        if(mediaURL) {
            DDLogDebug(@"MediaListView - This is a video");

            // Just recorded video
            if (self.source == UIImagePickerControllerSourceTypeCamera) {
                DDLogDebug(@"MediaListView - This is a new video, saving to photos album...");

                // Save video before getting its name
                ALAssetsLibrary *library = [ALAssetsLibrary new];

                [library writeVideoAtPathToSavedPhotosAlbum:mediaURL completionBlock:^(NSURL *assetURL, NSError *error){
                    if (error) {
                        DDLogDebug(@"MediaListView - Failed to save the photo to photos album...");
                    } else {
                        DDLogDebug(@"MediaListView - Video saved to photos album...");

                        // Video saved, we can get its name
                        [self getNameFromUrl:assetURL];
                    }
                }];
            }
            else {
                DDLogDebug(@"MediaListView - This is an existing video, getting name...");
                // Get video name
                [self getNameFromUrl:[info objectForKey:UIImagePickerControllerReferenceURL]];
            }
        }
        // This is a photo
        else {
            DDLogDebug(@"MediaListView - This is a photo...");
            self.originalImage = (UIImage*)[info objectForKey:UIImagePickerControllerOriginalImage];

            // Just taken photo
            if (self.source == UIImagePickerControllerSourceTypeCamera) {
                DDLogDebug(@"MediaListView - This is a new photo, saving to photos album...");

                // Save photo to album
                ALAssetsLibrary *library = [ALAssetsLibrary new];

                [library writeImageToSavedPhotosAlbum:[self.originalImage CGImage]
                                          orientation:(ALAssetOrientation)[self.originalImage imageOrientation]
                                      completionBlock:^(NSURL *assetURL, NSError *error){
                    if (error) {
                        DDLogDebug(@"MediaListView - Failed to save the vide to photos album...");
                    } else {
                        DDLogDebug(@"MediaListView - Photo saved to photos album...");

                        // Get photo name
                        [self getNameFromUrl:assetURL];
                    }
                }];
            }
            else {
                DDLogDebug(@"MediaListView - This is an existing image, getting name...");
                // Get photo name
                [self getNameFromUrl:[info objectForKey:@"UIImagePickerControllerReferenceURL"]];
            }
        }
    }
    @catch (NSException *exception) {
        DDLogError(@"MediaListView - Exception in picker didFinishPickingMediaWithInfo");
        DDLogError(@"MediaListView - %@", [exception description]);
    }
}

- (void)getNameFromUrl(NSURL*)url {
    @try {
        DDLogDebug(@"MediaListView - GetNameFromUrl");

        ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *asset) {

            if (asset == nil) {
                DDLogError(@"MediaListView - SaveAssetData - asset is nil!");
                return;
            }

            DDLogDebug(@"MediaListView - SaveAssetData - Got asset data: %@", asset.description);
            ALAssetRepresentation *assetRep = [asset defaultRepresentation];

            NSString *fileName = [assetRep filename];
            DDLogDebug(@"MediaListView - SaveAssetData - File name = %@", fileName);
        };

        ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *error) {
            DDLogError(@"MediaListView - SaveAssetData - Failed to get name%@", error);
        };

        ALAssetsLibrary *library = [ALAssetsLibrary new];
        [library assetForURL:url resultBlock:resultblock failureBlock:failureblock];
    }
    @catch (NSException *exception) {
        DDLogError(@"MediaListView - Exception in saveAssetData");
        DDLogError(@"MediaListView - %@", [exception description]);
    }
}



回答2:


how to get path of picture taken by camera ios swift

The image you have taken is not saved and has not any name yet. You need to save the image before you can get the path for the image. That´s why it returns nil.



来源:https://stackoverflow.com/questions/28272382/unable-to-get-file-name-of-image-captured-with-camera

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!