如何获取PHAsset的文件大小?

时间:2015-11-20 07:25:49

标签: ios objective-c phasset

假设有一个 PHAsset 代表图像。如何获取图像的文件大小?

我看到的唯一方法是使用valueForKey:私有ALAssetURL密钥,并检索ALAssetRepresentation的大小,但苹果可以拒绝此类应用。

2 个答案:

答案 0 :(得分:1)

您可以从PHAsset创建ALAsset,而无需使用此处所述的任何私有函数: How to get an ALAsset URL from a PHAsset?

但是,在iCloud Photo Library的上下文中,获取文件大小会有问题。对于不在设备上的照片,您可能会得到" 0"或者设备上版本的大小,在非常情况下不是原始版本。

答案 1 :(得分:0)

您可以通过以下两行代码从PHAsset获取图像的大小:

let Res = PHAssetResource.assetResources(for: yourPHAsset)
let imageSize = Res.first?.value(forKey: "fileSize")

如果要获取所有图像的大小,可以使用上面的两行代码,像这样:

//Fetch All Images From Gallery 
let phFetchRes = PHAsset.fetchAssets(with: PHAssetMediaType.image , options: nil)
        let phResCount = phFetchRes.count // In order to make indexSet
        let indxSet = IndexSet.init(integersIn: 0..<phResCount) 
        let phArray = phFetchRes.objects(at: indxSet)
        Print_Image_Sizes(PHAss: phArray) // Call Function

在这里,我们将打印每个图像的大小:

func Print_Image_Sizes(PHAss : [PHAsset]){
    for ph in PHAss{
        let size = PHAssetResource.assetResources(for: ph).first?.value(forKey: "fileSize")
        print(size)
    }
}

这是在图库中请求所有图像大小的最简单方法,而无需读取图像数据并将其转换为JPEG格式。