如何从照片属性中获得35焦距?

时间:2016-10-09 09:22:04

标签: java android camera android-camera

我使用camera2API,我需要获得focal lenght属性。

我找到了一种从相机特性中获取它的方法

float[] f = characteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS);

            for (float d : f) {
                Logger.logGeneral("LENS_INFO_AVAILABLE_FOCAL_LENGTHS : " + d);
            }

但是这种方法会将值3.8或接近它的值反映回来。它取决于设备。但是这个值必须接近30-35 ...

然后我找到了另一个解决方案。当我拍照时,我打开了照片属性,并且看到了我得到的和我需要的东西

enter image description here

我试图直接从图像中获取此属性

private JSONObject getJsonProperties() {
    JSONObject properties = new JSONObject();

    final ExifInterface exif = getExifInterface();
    final String [] tagProperties = {TAG_DATETIME, TAG_DATETIME_DIGITIZED, TAG_EXPOSURE_TIME,
            TAG_FLASH, TAG_FOCAL_LENGTH, TAG_GPS_ALTITUDE, TAG_GPS_ALTITUDE_REF, TAG_GPS_DATESTAMP,
            TAG_GPS_LATITUDE, TAG_GPS_LATITUDE_REF, TAG_GPS_LONGITUDE, TAG_GPS_LONGITUDE_REF,
            TAG_GPS_PROCESSING_METHOD, TAG_GPS_TIMESTAMP, TAG_IMAGE_LENGTH, TAG_IMAGE_WIDTH, TAG_ISO, TAG_MAKE,
            TAG_MODEL, TAG_ORIENTATION, TAG_SUBSEC_TIME, TAG_SUBSEC_TIME_DIG, TAG_SUBSEC_TIME_ORIG, TAG_WHITE_BALANCE};

    for (String tag : tagProperties){
        try {
            properties.put(tag, exif.getAttribute(tag));
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    return properties;
}

private ExifInterface getExifInterface() {
    ExifInterface exif = null;
    try {
        exif = new ExifInterface(ImageSaver.getImageFilePath());
    } catch (IOException e) {
        e.printStackTrace();
    }
    return exif;
}

我整合了一整套属性,当然还包括一个我非常需要TAG_FOCAL_LENGTH的属性。但是我又错了这样的valeu 473/100 ...我不知道它是什么意思...... Valeu必须大致30-35 ......

我做错了什么?

1 个答案:

答案 0 :(得分:0)

事实上我找到了答案。

根据@Aleks G

  

35毫米当量将是您获得的焦距乘以一定数量,称为作物因子。对于不同的制造商甚至型号,这个因素非常不同。例如,对于许多尼康数码单反相机,它是1.5;对于许多佳能数码单反相机来说它是1.6;对于Apple iPhone 5来说它是6.99,对于三星Galaxy S3来说它是7.6,依此类推。

     

据我所知,Android不提供API来确定设备相机的裁剪因素。

     

你可以尝试使用一个技巧。使用设备的相机拍照后,有些设备会填充FocalLengthIn35mmFilm exif标签 - 因此您可以尝试使用此技术。但并非所有手机都这样做,例如,我的华为没有。

     

其他一些设备将填充焦距的两个字段 - 第一个是使用的实际焦距,第二个是35毫米等效字段。并非所有人都这样做。同样的华为手机没有,但我的iPhone 5没有。

     

长话短说,无法保证从设备上获得的焦距计算出35mm的等效值。

最后我只是添加到我的属性列表中,例如标记

TAG_FOCAL_LENGTH_IN_35MM_FILM

现在如果它可用,我可以得到它