ios 获取 ALAsset 的路径
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5047643/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Getting the path of an ALAsset
提问by system
How can I get the path of each item in an array of ALAssets?
如何获取 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?
如何才能做到这一点?
回答by Mark Adams
Assuming you already have access to an array of ALAsset objects, you can retrieve their URL like this:
假设您已经可以访问一组 ALAsset 对象,您可以像这样检索它们的 URL:
someAsset.defaultRepresentation.url
someAsset.defaultRepresentation.url
回答by chilitechno.com
Assuming you have the Asset URL, such as assets-library://asset/asset.JPG?id=1000000477&ext=JPG:
假设您有资产 URL,例如 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");
}];
回答by dimaxyu
If you have an array of ALAssets then you can load the asset data.
如果您有一组 ALAssets,那么您可以加载资产数据。
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];
}