首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取ALAsset的路径

获取ALAsset的路径
EN

Stack Overflow用户
提问于 2011-02-19 07:26:37
回答 3查看 22.7K关注 0票数 11

如何获取ALAssets数组中每一项的路径?

我想获取这些图像,以便将它们添加到电子邮件中

例如:

代码语言:javascript
运行
复制
NSString *path = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"png"];
NSData *myData = [NSData dataWithContentsOfFile:path];
[mailViewController addAttachmentData:myData mimeType:@"image/png" fileName:@"sample"];

如何做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-19 08:04:02

假设您已经拥有对ALAsset对象数组的访问权限,您可以像这样检索它们的URL:

someAsset.defaultRepresentation.url

票数 31
EN

Stack Overflow用户

发布于 2011-04-29 12:26:33

假设您有Asset URL,比如assets-library://asset/asset.JPG?id=1000000477&ext=JPG:

代码语言:javascript
运行
复制
      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");
                      }]; 
票数 3
EN

Stack Overflow用户

发布于 2014-02-06 13:56:58

如果您有一个ALAssets数组,则可以加载资产数据。

代码语言:javascript
运行
复制
for (ALAsset *asset in assetsArray)
{
    // You cannot use ALAsset URL for file access in NSFileManager or NSData.
    // Get asset data. But be careful with very large data:
    ALAssetRepresentation *rep = [asset defaultRepresentation];
    unsigned long repSize      = (unsigned long)rep.size;

    Byte *buffer      = (Byte *)malloc(repSize);
    NSUInteger length = [rep getBytes:buffer fromOffset:0 length:repSize error:nil];

    NSData *myData = [NSData dataWithBytesNoCopy:buffer length:length freeWhenDone:YES];


    // fileName parameter in addAttachmentData:mimeType:fileName: can be any string.
    // You can take asset file name:
    NSString *fileName = [rep filename];

    // Then use in call:
    [mailViewController addAttachmentData:myData mimeType:@"image/png" fileName:fileName];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5047643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档