将EXIF数据转换为它应该是什么样子

时间:2012-11-12 17:15:32

标签: php exif

根据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';
}

2 个答案:

答案 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"))
}

我获得的值来自佳能图像,但它也适用于其他相机型号。