假设有一个代表图像的PHAsset。如何获取图像的文件大小?
我唯一看到的方法是使用私有的
我唯一看到的方法是使用私有的
ALAssetURL
键的valueForKey:
,并检索ALAssetRepresentation
的大小,但苹果可能会拒绝这样的应用程序。ALAssetURL
键的valueForKey:
,并检索ALAssetRepresentation
的大小,但苹果可能会拒绝这样的应用程序。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
的类型,而不是使用第一个资源。 - Franz Wang您可以按照此处所述的方式,无需使用任何私有函数,从PHAsset创建ALAsset: 如何从PHAsset获取ALAsset URL?
然而,在iCloud照片库的上下文中,获取文件大小是有问题的。对于不在设备上的照片,您可能会得到一个值为“0”或者是设备上版本的大小,而这并不是每种情况下的原始大小。