1

根据 PHP,图像的 EXIF 信息用于20/10F 值、51/10焦距和10/150曝光。这不是这些值的样子!它应该看起来像F/2F 值、5, mm焦距和1/150曝光。这些值只是一些例子!请参阅此链接,了解我真正的意思是它应该是什么样子。请注意,我不会使用任何第三方软件!只是纯PHP。

是否可以将这些值(例如)转换为PHP20/10中的实际值(例如)?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';
}
4

2 回答 2

2

此链接上的“drpain”说

请注意,当使用 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
于 2012-11-12T17:33:44.380 回答
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"))
}

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

于 2019-02-12T17:07:14.290 回答