iosobjective-cipadnsdataphphotolibrary

How To get Image URL From PHAsset? Is it possible To save Image using PHAsset URL to document Directory?


I used

NSURL *urlA = [info valueForKey:@"PHImageFileURLKey"];

but when i try to save image using URL then URL is nil.

NSData *pngData = [NSData dataWithContentsOfURL:urlA options:NSDataReadingMapped error:nil];

Solution

  • asset = Here you have to pass your PHAsset .

    PHImageRequestOptions * imageRequestOptions = [[PHImageRequestOptions alloc] init];
     [[PHImageManager defaultManager]
                 requestImageDataForAsset:asset
                                options:imageRequestOptions
                          resultHandler:^(NSData *imageData, NSString *dataUTI,
                                          UIImageOrientation orientation, 
                                          NSDictionary *info) 
         {
              NSLog(@"info = %@", info);
              if ([info objectForKey:@"PHImageFileURLKey"]) {
    
                   NSURL *path = [info objectForKey:@"PHImageFileURLKey"];
                   // if you want to save image in document see this.
                   [self saveimageindocument:imageData withimagename:[NSString stringWithFormat:@"DEMO"]];
              }                                            
        }];
    
    -(void) saveimageindocument:(NSData*) imageData withimagename:(NSString*)imagename{
    
        NSString *writePath = [NSString stringWithFormat:@"%@/%@.png",[Utility getDocumentDirectory],imagename];
    
        if (![imageData writeToFile:writePath atomically:YES]) {
            // failure
            NSLog(@"image save failed to path %@", writePath);
    
        } else {
            // success.
            NSLog(@"image save Successfully to path %@", writePath);
        }
    
    }
    + (NSString*)getDocumentDirectory {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        return [paths objectAtIndex:0];
    }
    

    Check image that landscape mode or portrait mode

    if (chooseimage.size.height >= chooseimage.size.width)
    {
             Islandscape = NO;
    }else{
         UIImage* landscapeImage = [UIImage imageWithCGImage:chooseimage.CGImage
                                                          scale:chooseimage.scale
                                                    orientation:UIImageOrientationLeft];
            self.imgPreviewView.image = landscapeImage;
            self.imgPreviewView.contentMode = UIViewContentModeScaleAspectFill;
            Islandscape = YES;
     }
    

    Add this permission into info.plist file

    <key>NSPhotoLibraryUsageDescription</key>
    <string>$(PRODUCT_NAME) would like to access your photo library to let you select a picture.</string>