Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting the path of an ALAsset

How can I get the path of each item in an array of ALAssets?

I would like to get the images so that I can add them to an email

e.g.

NSString *path = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"png"];
NSData *myData = [NSData dataWithContentsOfFile:path];
[mailViewController addAttachmentData:myData mimeType:@"image/png" fileName:@"sample"];

How can this be done?

like image 273
some_id Avatar asked Feb 18 '11 23:02

some_id


2 Answers

Assuming you already have access to an array of ALAsset objects, you can retrieve their URL like this:

someAsset.defaultRepresentation.url

like image 117
Mark Adams Avatar answered Sep 28 '22 12:09

Mark Adams


Assuming you have the Asset URL, such as assets-library://asset/asset.JPG?id=1000000477&ext=JPG:

      ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
      {
             // [[myasset defaultRepresentation] fullResolutionImage]
             // is a CGImageRef so you can process it like you would any CGImageRef to save to disk, resize, etc. 

                NSURL *urlPath = [[NSURL fileURLWithPath:[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]] URLByAppendingPathComponent:@"somefile.png"];

                CGImageDestinationRef ref = CGImageDestinationCreateWithURL((CFURLRef)urlPath, kUTTypePNG, 1, NULL);
                CGImageDestinationAddImage(ref, (CGImageRef)[[myasset defaultRepresentation] fullResolutionImage], NULL);

                NSDictionary *props = [[NSDictionary dictionaryWithObjectsAndKeys:
                                        [NSNumber numberWithFloat:1.0], kCGImageDestinationLossyCompressionQuality,
                                        nil] retain];

                CGImageDestinationSetProperties(ref, (CFDictionaryRef) props);

                CGImageDestinationFinalize(ref);
                CFRelease(ref);

        };

        NSURL *asseturl = [NSURL URLWithString:mediaurl];
        ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease];

        NSString *asseturl = @"assets-library://asset/asset.JPG?id=1000000477&ext=JPG";

        [assetslibrary assetForURL:asseturl 
                       resultBlock:resultblock
                      failureBlock:^(NSError *error) {
                          NSLog(@"error couldn't get photo");
                      }]; 
like image 37
chilitechno.com Avatar answered Sep 28 '22 11:09

chilitechno.com