首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从PHAsset获取ALAsset地址?

如何从PHAsset获取ALAsset地址?
EN

Stack Overflow用户
提问于 2015-03-06 05:02:22
回答 5查看 21.8K关注 0票数 21

您可以使用undocumented PHAsset.ALAssetURL属性偷偷地使用†完成此操作,但我正在寻找有文档记录的内容。

在Objective-C中使用†,这将有所帮助

代码语言:javascript
运行
复制
@interface PHAsset (Sneaky)

@property (nonatomic, readonly) NSURL *ALAssetURL;

@end
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-03-06 22:00:55

通过利用PHAsset的本地标识符来创建assetURL。示例:PHAsset.localidentifier返回91B1C271-C617-49CE-A074-E391BA7F843F/L0/001

现在获取构建assetURL的前32个字符,如下所示:

assets-library://asset/asset.JPG?id=91B1C271-C617-49CE-A074-E391BA7F843F&ext=JPG

您可以根据资产的UTI更改扩展JPG (requestImageDataForAsset返回UTI),但在我的测试中,assetURL的扩展似乎被忽略了。

票数 45
EN

Stack Overflow用户

发布于 2015-05-19 13:39:29

我也希望能够获得资产的URL。然而,我已经意识到可以将localIdentifier持久化,并使用它来恢复PHAsset

代码语言:javascript
运行
复制
PHAsset* asset = [PHAsset fetchAssetsWithLocalIdentifiers:@[localIdentifier] options:nil].firstObject;

旧的资源URL可以使用以下方式进行转换:

代码语言:javascript
运行
复制
PHAsset* legacyAsset = [PHAsset fetchAssetsWithALAssetUrls:@[assetUrl] options:nil].firstObject;
NSString* convertedIdentifier = legacyAsset.localIdentifier;

(在这个方法被淘汰之前...)

(感谢holtmann - localIdentifier隐藏在PHObject中。)

票数 9
EN

Stack Overflow用户

发布于 2017-11-14 21:18:50

以下是在iOS 11模拟器和设备上测试的工作代码

代码语言:javascript
运行
复制
PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:nil];
    [result enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        PHAsset *asset = (PHAsset *)obj;
        [asset requestContentEditingInputWithOptions:nil completionHandler:^(PHContentEditingInput * _Nullable contentEditingInput, NSDictionary * _Nonnull info) {
            NSLog(@"URL:%@",  contentEditingInput.fullSizeImageURL.absoluteString);
            NSString* path = [contentEditingInput.fullSizeImageURL.absoluteString substringFromIndex:7];//screw all the crap of file://
            NSFileManager *fileManager = [NSFileManager defaultManager];
            BOOL isExist = [fileManager fileExistsAtPath:path];
            if (isExist)
                NSLog(@"oh yeah");
            else {
                NSLog(@"damn");
            }
        }];
    }];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28887638

复制
相关文章

相似问题

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