gpt4 book ai didi

iOS图像元数据如何获取小数值作为分数字符串?

转载 作者:行者123 更新时间:2023-11-29 05:52:45 25 4
gpt4 key购买 nike

编辑:已解决,我回答了以下问题。

我使用以下内容来获取 PHAsset 的元数据:

let data = NSData.init(contentsOf: url!)!
if let imageSource = CGImageSourceCreateWithData(data, nil) {
let metadata = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil)! as NSDictionary
}

元数据字典包含我正在寻找的所有值。然而,像 ShutterSpeedValueExposureTime 等包含分数的字段会以小数形式打印:

ExposureTime = "0.05"
ShutterSpeedValue = "4.321956769055745"

当我在 Mac 的预览应用程序和 exiftool 上查看此数据时,它显示:

ExposureTime = 1/20
ShutterSpeedValue = 1/20

如何获得正确的分数字符串而不是小数字符串?

编辑:我尝试简单地使用SO代码将小数转换为分数字符串,但这不正确:

func rationalApproximation(of x0 : Double, withPrecision eps : Double = 1.0E-6) -> String {
var x = x0
var a = x.rounded(.down)
var (h1, k1, h, k) = (1, 0, Int(a), 1)

while x - a > eps * Double(k) * Double(k) {
x = 1.0/(x - a)
a = x.rounded(.down)
(h1, k1, h, k) = (h, k, h1 + Int(a) * h, k1 + Int(a) * k)
}
return "\(h)/\(k)"
}

正如您所注意到的,打印为 4.321956769055745ShutterSpeedValue 的十进制值甚至不等于 1/20。

最佳答案

已解决。

按照

https://www.dpreview.com/forums/post/54376235

ShutterSpeedValue is defined as APEX value, where:
ShutterSpeed = -log2(ExposureTime)

所以 -log2(1/20) 是 4.3219,正如我观察到的那样。

因此,为了获取 ShutterSpeedValue,我使用以下命令:

“1/\(ceil(pow(2, Double(4.321956769055745))))”

我测试了 3 张不同的照片,1/20、1/15 和 1/1919 都使用您的公式正确计算出来。

关于iOS图像元数据如何获取小数值作为分数字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55527936/

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