Php 将EXIF数据转换为其外观

Php 将EXIF数据转换为其外观,php,exif,Php,Exif,根据PHP,图像的EXIF信息对于F-number是20/10,对于焦距是51/10,对于曝光是10/150。这不是这些值应该是什么样子!对于F-number,它应该像F/2;对于焦距,它应该像5,mm;对于曝光,它应该像1/150。这些值只是一些示例!请看我到底是什么意思,它应该是什么样子。请注意,我不会使用任何第三方软件!只是纯PHP 是否可以在PHP中将这些值(例如20/10)转换为真实值(例如F/2)?如果是,我如何转换它们 提前谢谢 编辑 以下代码将150/10转换为150秒,即2分3

根据PHP,图像的EXIF信息对于F-number是
20/10
,对于焦距是
51/10
,对于曝光是
10/150
。这不是这些值应该是什么样子!对于F-number,它应该像
F/2
;对于焦距,它应该像
5,mm
;对于曝光,它应该像
1/150
。这些值只是一些示例!请看我到底是什么意思,它应该是什么样子。请注意,我不会使用任何第三方软件!只是纯PHP

是否可以在PHP中将这些值(例如
20/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';
}
list($d1,$d2)=str_split('/','P1220379.JPG');
如果($d1>0和$d2>0){
$e=$d1/$d2;
}否则{
$e='P1220379.JPG';
}
如果($e<1和$e>0){
$e='1/'。四舍五入(1/$e,0)。'sekunder';
}否则{
$e=圆形($e,1)。“sekunder”;
}
上面的“drpain”表示

请注意,当使用GD和most图像调整图像大小时 处理脚本或应用程序时,您将失去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 />";

?>

如果有人需要,这是我在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()))
    }
}

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

但这并没有解决我的焦距问题。如何将焦距转换为正确的值?您是否对未编辑的图片尝试了此代码,并查看其输出结果?是的。该代码仅“转换”F编号(光圈)和曝光时间。非焦距:/n在该页上找不到焦距。可能需要深入研究exif字段并尝试找出正确的字段名?我找到了一些计算照片快门时间的代码行,但显示的秒数错误。请看我的编辑。
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"))
}