gpt4 book ai didi

Swift:获取 JPEG 图像的正确文件大小

转载 作者:行者123 更新时间:2023-11-28 13:32:09 31 4
gpt4 key购买 nike

我有一个 UIImage 对象,比如通过 PHAsset 从相机胶卷中获取。图像保存为 .jpg 文件:

asset.requestContentEditingInput(with: nil) { (input, nil) in
print(input?.fullSizeImageURL) // somefile.jpg
}

要获取文件大小,不应该从 data.count 中返回正确的文件大小(以字节为单位)吗?

PHImageManager.default().requestImageData(for: asset, options: nil) { data, _, _, _ in
if let _data = data {
print(_data.count) // 6759240
}
}

特定图像的输出是 6759240fileSize() 返回 2978548.0(这是正确的文件大小)字节。

func fileSize(forURL url: Any) -> Double {
var fileURL: URL?
var fileSize: Double = 0.0
if (url is URL) || (url is String)
{
if (url is URL) {
fileURL = url as? URL
}
else {
fileURL = URL(fileURLWithPath: url as! String)
}
var fileSizeValue = 0.0
try? fileSizeValue = (fileURL?.resourceValues(forKeys: [URLResourceKey.fileSizeKey]).allValues.first?.value as! Double?)!
if fileSizeValue > 0.0 {
fileSize = (Double(fileSizeValue))
}
}
return fileSize
}

这是否意味着 someUIImage?.jpegData(compressionQuality: 1)?.count 没有返回正确大小的 JPEG 图像文件(如果已保存)?

另外,有没有办法在将图像文件写入磁盘之前确定图像文件的大小?

所有这些都是为了比较原始图像和压缩图像之间的文件大小。

最佳答案

这听起来像是对各种术语和调用的含义的误解。

您无法直接访问存储在用户照片库中的文件。实际上可能没有这样的文件;您不应该对存储格式做出任何假设。当您向 PHImageManager 请求图像的 data 时,您会得到位图数据,可以使用了。因此,您应该期望此数据,与图像的尺寸成正比。 6759240 超过 6MB,这在旧版 iPhone 上听起来差不多;较新的 iPhone,拍摄 4032x3024 的照片,超过 8MB。

然后在代码的不同部分调用 fileSize(forURL:)。现在您正在文件系统中查看一个您可以访问它的地方的实际文件。如果这是一个图像文件,它是压缩的;压缩多少取决于格式。 2978548 大约为 3MB,这对于没有太多损失的 JPEG 压缩来说非常好。

最后,你问UIImage jpegData(compressionQuality: 1)?.count。您没有显示任何实际调用它的代码。但这是可以直接使用 write(to:) 和 URL 保存为文件的数据,我希望它与 fileSize(forURL:) 相同如果您稍后要检查同一个文件。

关于Swift:获取 JPEG 图像的正确文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57199763/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com