根据PHP,图像的EXIF信息对于F值为20/10
,对于焦距为51/10
,对于曝光为10/150
。这不是这些值的样子!对于F值,它应该是F/2
,对于焦距,它应该是5, mm
,对于曝光,它应该是1/150
。这些值只是一些例子!请参阅this link,了解我的真实含义。请注意,我不使用任何第三方软件!只是纯PHP。
是否可以将这些值(例如20/10
)转换为PHP中的实际值(例如F/2
)?如果是,我该如何转换它们?
提前致谢。
修改
以下代码将150/10
转换为150秒,即2分30秒。这是错误的,因为我拍了15秒快门的照片。如何使其计算到正确的秒数?
list($d1, $d2) = str_split('/', 'P1220379.JPG');
if($d1 > 0 AND $d2 > 0) {
$e = $d1 / $d2;
} else {
$e = 'P1220379.JPG';
}
if($e < 1 AND $e > 0) {
$e = '1/'.round(1 / $e, 0).' sekunder';
} else {
$e = round($e, 1).' sekunder';
}
答案 0 :(得分:2)
“drpain”就此link说了
请注意,使用GD和大多数图像调整图像大小时 处理脚本或应用程序,你将松散EXIF 信息。我作为一种解决方法做的是将此信息预订到 在我重新调整图像大小之前的MySQL。
他的小节目
<?php
$camera = cameraUsed("/img/myphoto.jpg");
echo "Camera Used: " . $camera['make'] . " " . $camera['model'] . "<br />";
echo "Exposure Time: " . $camera['exposure'] . "<br />";
echo "Aperture: " . $camera['aperture'] . "<br />";
echo "ISO: " . $camera['iso'] . "<br />";
echo "Date Taken: " . $camera['date'] . "<br />";
?>
确实以正确的格式生成这些数字,根据他
将根据数据显示以下内容:
Camera Used: SONY DSC-S930
Exposure Time: 1/400
Aperture: f/4.3
ISO: 100
Date Taken: 2010:12:10 18:18:45
答案 1 :(得分:0)
这是我在Kotlin中的解决方案
fun convertShutterSpeed(value: String?): String {
if (value.isNullOrBlank()) {
return ""
}
val split = value.split("/")
val ed: Float = split[0].toFloat()
val ed1: Float = split[1].toFloat()
val fl = ed / ed1
return if (ed < 0) {
Math.round(1 / Math.pow(2.toDouble(), fl.toDouble())).toString() + "s"
} else {
"1/" + Math.round(Math.pow(2.toDouble(), fl.toDouble()))
}
}
这是一些测试
@Test
fun convertShutterSpeed() {
assertEquals("1/8", imageExif.convertShutterSpeed("3/1"))
assertEquals("1/10", imageExif.convertShutterSpeed("3321928/1000000"))
assertEquals("1/20", imageExif.convertShutterSpeed("4321928/1000000"))
assertEquals("1/125", imageExif.convertShutterSpeed("6965784f/1000000"))
assertEquals("1/250", imageExif.convertShutterSpeed("7965784/1000000"))
assertEquals("1/320", imageExif.convertShutterSpeed("8321928/1000000"))
assertEquals("1/400", imageExif.convertShutterSpeed("8643856/1000000"))
assertEquals("1/640", imageExif.convertShutterSpeed("9321928/1000000"))
assertEquals("1/800", imageExif.convertShutterSpeed("9643856/1000000"))
assertEquals("1/1000", imageExif.convertShutterSpeed("9965784/1000000"))
assertEquals("2s", imageExif.convertShutterSpeed("-1/1"))
assertEquals("6s", imageExif.convertShutterSpeed("-2584963/1000000"))
}
我获得的值来自佳能图像,但它也适用于其他相机型号。