作者:他妈的碧海连天 | 来源:互联网 | 2023-05-19 11:30
你可以偷偷地使用未记录的 PHAsset.ALAssetURL
财产† ,但我正在寻找记录的东西.
†在Objective-C中,这将有所帮助
@interface PHAsset (Sneaky)
@property (nonatomic, readonly) NSURL *ALAssetURL;
@end
holtmann..
44
通过利用的localidentifier创建assetURL PHAsset
.示例:
PHAsset.localidentifier
return91B1C271-C617-49CE-A074-E391BA7F843F/L0/001
现在使用32个第一个字符来构建assetURL,如:
assets-library://asset/asset.JPG?id=91B1C271-C617-49CE-A074-E391BA7F843F&ext=JPG
您可以JPG
根据资产的UTI 更改扩展名(requestImageDataForAsset
返回UTI),但在我的测试中,无论如何都会忽略assetURL的扩展名.
1> holtmann..:
通过利用的localidentifier创建assetURL PHAsset
.示例:
PHAsset.localidentifier
return91B1C271-C617-49CE-A074-E391BA7F843F/L0/001
现在使用32个第一个字符来构建assetURL,如:
assets-library://asset/asset.JPG?id=91B1C271-C617-49CE-A074-E391BA7F843F&ext=JPG
您可以JPG
根据资产的UTI 更改扩展名(requestImageDataForAsset
返回UTI),但在我的测试中,无论如何都会忽略assetURL的扩展名.
我们必须这样做只是为了得到一个URL是荒谬的.
从localIdentifier获取GUID的正确方法是拆分第一个/.(有些GUID超过32个字符.)如果有人知道获取资产URL的更好方法,请在此处发布.这很黑,很容易打破未来的更新.
确保从localIdentifier中删除"/ L0/001",否则每次都会失败.
2> Matt..:
我希望能够获得资产的URL.但是,我已经意识到localIdentifier
可以坚持而不是用来恢复PHAsset
.
PHAsset* asset = [PHAsset fetchAssetsWithLocalIdentifiers:@[localIdentifier] options:nil].firstObject;
可以使用以下方式转换旧版资产网址:
PHAsset* legacyAsset = [PHAsset fetchAssetsWithALAssetUrls:@[assetUrl] options:nil].firstObject;
NSString* cOnvertedIdentifier= legacyAsset.localIdentifier;
(在那种方法被淘汰之前......)
(感谢霍尔特曼 - localIdentifier
隐藏在其中PHObject
.)
你说的是什么_may_是真的,但它似乎只与实际(我认为,明确陈述)的问题倾斜相关.
我发现创建一个单独的自我回答问题是一种更好的格式,适用于您所做的任何此类实现.我已经做了很多,尽管他们告诉你,他们还没有失明.:)你甚至可以链接到这个问题.