【问题标题】:How to get file size of PHAsset?如何获取 PHAsset 的文件大小?
【发布时间】:2015-11-20 07:25:49
【问题描述】:

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

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

【问题讨论】:

标签: ios objective-c phasset


【解决方案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 的方式依赖于未记录的假设。这就是为什么我还没有接受这个答案。
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 2017-12-20
  • 2017-02-02
  • 1970-01-01
  • 2016-06-09
  • 2015-12-17
  • 1970-01-01
  • 2010-09-18
相关资源
最近更新 更多