You need to enable JavaScript to run this app. iOS:UIImage计算得到的字节大小与实际图片大小不一致问题
优惠活动
大模型
产品
解决方案
定价
更多

iOS:UIImage计算得到的字节大小与实际图片大小不一致问题

大小计算异常的核心原因

你当前的计算方式拿到的不是原始图片的真实文件大小,差异主要来自以下几点:

  • jpegData(compressionQuality:)是把解码后的UIImage位图对象重新编码为JPEG数据,哪怕压缩质量设为1,使用的编码参数(量化表、色度采样率等)和原始图片的编码参数完全不同,编码出来的数据大小自然和原图不一致。
  • 原始5MB的图片文件除了JPEG像素数据外,还包含EXIF信息、位置信息、内嵌缩略图、版权信息等附加元数据,重新编码得到的JPEG数据不会完整保留所有原始元数据,这部分也会导致大小缩水。
  • UIImage是系统解码后的位图对象,从UIImagePickerController拿到originalImage时,系统可能已经对原始图片做了底层的像素格式优化,和原始文件的像素存储逻辑不一样,重新编码后大小也会发生变化。
正确获取原始图片文件大小的方案

如果需要拿到相册原图的真实磁盘大小,不要通过UIImage重新编码计算,直接从PHAsset中读取原始资源的大小即可:

import Photos

// 需提前申请相册访问权限
if let asset = info[UIImagePickerController.InfoKey.phAsset] as? PHAsset {
    let resources = PHAssetResource.assetResources(for: asset)
    guard let originalPhotoResource = resources.first(where: { $0.type == .photo }) else { return }
    let originalFileSize = originalPhotoResource.value(forKey: "fileSize") as? Int64 ?? 0
    print("原始图片大小(KB):", Double(originalFileSize) / 1024)
}

注意如果是拍摄的新图片而非从相册选取,你可以直接把拍摄得到的UIImage先写入磁盘再计算大小,得到的就是你存储的文件的真实大小。

内容的提问来源于stack exchange,提问作者Shahbaz Saleem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 02:12:04