如何获取 PHAsset 的文件大小?
Posted
技术标签:
【中文标题】如何获取 PHAsset 的文件大小?【英文标题】:How to get file size of PHAsset? 【发布时间】:2015-11-20 07:25:49 【问题描述】:假设有一个 PHAsset 表示图像。如何获取图片的文件大小?
我看到的唯一方法是使用valueForKey:
和私有ALAssetURL
密钥,并检索ALAssetRepresentation
的大小,但苹果可以拒绝这样的应用程序。
【问题讨论】:
您可以在这里找到可能的解决方案:***.com/a/38059090/2618955 【参考方案1】:Swift 4/5 解决方案
扩展
extension PHAsset
var fileSize: Float
get
let resource = PHAssetResource.assetResources(for: self)
let imageSizeByte = resource.first?.value(forKey: "fileSize") as! Float
let imageSizeMB = imageSizeByte / (1024.0*1024.0)
return imageSizeMB
功能
func getImageFileSize(from asset: PHAsset) -> Float
let resource = PHAssetResource.assetResources(for: asset)
let imageSizeByte = resource.first?.value(forKey: "fileSize") as! Float
let imageSizeMB = imageSizeByte / (1024.0*1024.0)
return imageSizeMB
【讨论】:
请注意,如果您在照片应用中修改了您的照片或视频,您将获得多个资源,包括原始媒体和修改后的媒体,以及调整数据。所以你应该判断PHAssetResource
的类型,而不是使用第一个。
慢动作视频也有多种资源。【参考方案2】:
您可以从 PHAsset 创建 ALAsset,而无需使用此处所述的任何私有函数: How to get an ALAsset URL from a PHAsset?
但是,在 iCloud 照片库的上下文中获取文件大小是有问题的。对于不在设备上的照片,您可能会得到“0”值或设备上版本的大小,这在很多情况下都不是原始照片。
【讨论】:
您要求提供非私有解决方案。上面链接中所述的解决方案仅使用公共 API。 API 是公开的,但您构建资产 URL 的方式依赖于未记录的假设。这就是为什么我还没有接受这个答案。以上是关于如何获取 PHAsset 的文件大小?的主要内容,如果未能解决你的问题,请参考以下文章