Horde_Image_Exif::getHumanReadable PHP Method

getHumanReadable() public static method

Some of these cases are ported from the Exifer library, others were changed from their implementation where the EXIF standard dictated different behaviour.
public static getHumanReadable ( string $field, string $data ) : string
$field string The name of the field to translate.
$data string The data value to translate.
return string The converted data.
    public static function getHumanReadable($field, $data)
    {
        switch ($field) {
            case 'ExposureMode':
                switch ($data) {
                    case 0:
                        return Horde_Image_Translation::t("Auto exposure");
                    case 1:
                        return Horde_Image_Translation::t("Manual exposure");
                    case 2:
                        return Horde_Image_Translation::t("Auto bracket");
                    default:
                        return Horde_Image_Translation::t("Unknown");
                }
            case 'ExposureProgram':
                switch ($data) {
                    case 1:
                        return Horde_Image_Translation::t("Manual");
                    case 2:
                        return Horde_Image_Translation::t("Normal Program");
                    case 3:
                        return Horde_Image_Translation::t("Aperture Priority");
                    case 4:
                        return Horde_Image_Translation::t("Shutter Priority");
                    case 5:
                        return Horde_Image_Translation::t("Creative");
                    case 6:
                        return Horde_Image_Translation::t("Action");
                    case 7:
                        return Horde_Image_Translation::t("Portrait");
                    case 8:
                        return Horde_Image_Translation::t("Landscape");
                    default:
                        return Horde_Image_Translation::t("Unknown");
                }
            case 'XResolution':
            case 'YResolution':
                if (strpos($data, '/') !== false) {
                    list($n, $d) = explode('/', $data, 2);
                    return sprintf(Horde_Image_Translation::t("%d dots per unit"), $n);
                }
                return sprintf(Horde_Image_Translation::t("%d per unit"), $data);
            case 'ResolutionUnit':
                switch ($data) {
                    case 1:
                        return Horde_Image_Translation::t("Pixels");
                    case 2:
                        return Horde_Image_Translation::t("Inch");
                    case 3:
                        return Horde_Image_Translation::t("Centimeter");
                    default:
                        return Horde_Image_Translation::t("Unknown");
                }
            case 'ExifImageWidth':
            case 'ExifImageLength':
                return sprintf(Horde_Image_Translation::t("%d pixels"), $data);
            case 'Orientation':
                switch ($data) {
                    case 1:
                        return sprintf(Horde_Image_Translation::t("Normal (O deg)"));
                    case 2:
                        return sprintf(Horde_Image_Translation::t("Mirrored"));
                    case 3:
                        return sprintf(Horde_Image_Translation::t("Upsidedown"));
                    case 4:
                        return sprintf(Horde_Image_Translation::t("Upsidedown Mirrored"));
                    case 5:
                        return sprintf(Horde_Image_Translation::t("90 deg CW Mirrored"));
                    case 6:
                        return sprintf(Horde_Image_Translation::t("90 deg CCW"));
                    case 7:
                        return sprintf(Horde_Image_Translation::t("90 deg CCW Mirrored"));
                    case 8:
                        return sprintf(Horde_Image_Translation::t("90 deg CW"));
                }
                break;
            case 'ExposureTime':
                if (strpos($data, '/') !== false) {
                    list($n, $d) = explode('/', $data, 2);
                    if ($d == 0) {
                        return;
                    }
                    $data = $n / $d;
                }
                return self::_formatExposure($data);
            case 'ShutterSpeedValue':
                if (strpos($data, '/') !== false) {
                    list($n, $d) = explode('/', $data, 2);
                    if ($d == 0) {
                        return;
                    }
                    $data = $n / $d;
                }
                $data = exp($data * log(2));
                if ($data > 0) {
                    $data = 1 / $data;
                }
                return self::_formatExposure($data);
            case 'ApertureValue':
            case 'MaxApertureValue':
                if (strpos($data, '/') !== false) {
                    list($n, $d) = explode('/', $data, 2);
                    if ($d == 0) {
                        return;
                    }
                    $data = $n / $d;
                    $data = exp($data * log(2) / 2);
                    // Precision is 1 digit.
                    $data = round($data, 1);
                }
                return 'f/' . $data;
            case 'FocalLength':
                if (strpos($data, '/') !== false) {
                    list($n, $d) = explode('/', $data, 2);
                    if ($d == 0) {
                        return;
                    }
                    return sprintf(Horde_Image_Translation::t("%d mm"), round($n / $d));
                }
                return sprintf(Horde_Image_Translation::t("%d mm"), $data);
            case 'FNumber':
                if (strpos($data, '/') !== false) {
                    list($n, $d) = explode('/', $data, 2);
                    if ($d != 0) {
                        return 'f/' . round($n / $d, 1);
                    }
                }
                return 'f/' . $data;
            case 'ExposureBiasValue':
                if (strpos($data, '/') !== false) {
                    list($n, $d) = explode('/', $data, 2);
                    if ($n == 0) {
                        return '0 EV';
                    }
                }
                return $data . ' EV';
            case 'MeteringMode':
                switch ($data) {
                    case 0:
                        return Horde_Image_Translation::t("Unknown");
                    case 1:
                        return Horde_Image_Translation::t("Average");
                    case 2:
                        return Horde_Image_Translation::t("Center Weighted Average");
                    case 3:
                        return Horde_Image_Translation::t("Spot");
                    case 4:
                        return Horde_Image_Translation::t("Multi-Spot");
                    case 5:
                        return Horde_Image_Translation::t("Multi-Segment");
                    case 6:
                        return Horde_Image_Translation::t("Partial");
                    case 255:
                        return Horde_Image_Translation::t("Other");
                    default:
                        return sprintf(Horde_Image_Translation::t("Unknown: %s"), $data);
                }
                break;
            case 'LightSource':
                switch ($data) {
                    case 1:
                        return Horde_Image_Translation::t("Daylight");
                    case 2:
                        return Horde_Image_Translation::t("Fluorescent");
                    case 3:
                        return Horde_Image_Translation::t("Tungsten");
                    case 4:
                        return Horde_Image_Translation::t("Flash");
                    case 9:
                        return Horde_Image_Translation::t("Fine weather");
                    case 10:
                        return Horde_Image_Translation::t("Cloudy weather");
                    case 11:
                        return Horde_Image_Translation::t("Shade");
                    case 12:
                        return Horde_Image_Translation::t("Daylight fluorescent");
                    case 13:
                        return Horde_Image_Translation::t("Day white fluorescent");
                    case 14:
                        return Horde_Image_Translation::t("Cool white fluorescent");
                    case 15:
                        return Horde_Image_Translation::t("White fluorescent");
                    case 17:
                        return Horde_Image_Translation::t("Standard light A");
                    case 18:
                        return Horde_Image_Translation::t("Standard light B");
                    case 19:
                        return Horde_Image_Translation::t("Standard light C");
                    case 20:
                        return 'D55';
                    case 21:
                        return 'D65';
                    case 22:
                        return 'D75';
                    case 23:
                        return 'D50';
                    case 24:
                        return Horde_Image_Translation::t("ISO studio tungsten");
                    case 255:
                        return Horde_Image_Translation::t("other light source");
                    default:
                        return Horde_Image_Translation::t("Unknown");
                }
            case 'WhiteBalance':
                switch ($data) {
                    case 0:
                        return Horde_Image_Translation::t("Auto");
                    case 1:
                        return Horde_Image_Translation::t("Manual");
                    default:
                        Horde_Image_Translation::t("Unknown");
                }
                break;
            case 'FocalLengthIn35mmFilm':
                return $data . ' mm';
            case 'Flash':
                switch ($data) {
                    case 0:
                        return Horde_Image_Translation::t("No Flash");
                    case 1:
                        return Horde_Image_Translation::t("Flash");
                    case 5:
                        return Horde_Image_Translation::t("Flash, strobe return light not detected");
                    case 7:
                        return Horde_Image_Translation::t("Flash, strobe return light detected");
                    case 9:
                        return Horde_Image_Translation::t("Compulsory Flash");
                    case 13:
                        return Horde_Image_Translation::t("Compulsory Flash, Return light not detected");
                    case 15:
                        return Horde_Image_Translation::t("Compulsory Flash, Return light detected");
                    case 16:
                        return Horde_Image_Translation::t("No Flash");
                    case 24:
                        return Horde_Image_Translation::t("No Flash");
                    case 25:
                        return Horde_Image_Translation::t("Flash, Auto-Mode");
                    case 29:
                        return Horde_Image_Translation::t("Flash, Auto-Mode, Return light not detected");
                    case 31:
                        return Horde_Image_Translation::t("Flash, Auto-Mode, Return light detected");
                    case 32:
                        return Horde_Image_Translation::t("No Flash");
                    case 65:
                        return Horde_Image_Translation::t("Red Eye");
                    case 69:
                        return Horde_Image_Translation::t("Red Eye, Return light not detected");
                    case 71:
                        return Horde_Image_Translation::t("Red Eye, Return light detected");
                    case 73:
                        return Horde_Image_Translation::t("Red Eye, Compulsory Flash");
                    case 77:
                        return Horde_Image_Translation::t("Red Eye, Compulsory Flash, Return light not detected");
                    case 79:
                        return Horde_Image_Translation::t("Red Eye, Compulsory Flash, Return light detected");
                    case 89:
                        return Horde_Image_Translation::t("Red Eye, Auto-Mode");
                    case 93:
                        return Horde_Image_Translation::t("Red Eye, Auto-Mode, Return light not detected");
                    case 95:
                        return Horde_Image_Translation::t("Red Eye, Auto-Mode, Return light detected");
                }
                break;
            case 'FileSize':
                if ($data <= 0) {
                    return '0 Bytes';
                }
                $s = array('B', 'kB', 'MB', 'GB');
                $e = floor(log($data, 1024));
                return round($data / pow(1024, $e), 2) . ' ' . $s[$e];
            case 'SensingMethod':
                switch ($data) {
                    case 1:
                        return Horde_Image_Translation::t("Not defined");
                    case 2:
                        return Horde_Image_Translation::t("One Chip Color Area Sensor");
                    case 3:
                        return Horde_Image_Translation::t("Two Chip Color Area Sensor");
                    case 4:
                        return Horde_Image_Translation::t("Three Chip Color Area Sensor");
                    case 5:
                        return Horde_Image_Translation::t("Color Sequential Area Sensor");
                    case 7:
                        return Horde_Image_Translation::t("Trilinear Sensor");
                    case 8:
                        return Horde_Image_Translation::t("Color Sequential Linear Sensor");
                    default:
                        return Horde_Image_Translation::t("Unknown");
                }
            case 'ColorSpace':
                switch ($data) {
                    case 1:
                        return Horde_Image_Translation::t("sRGB");
                    default:
                        return Horde_Image_Translation::t("Uncalibrated");
                }
            case 'SceneCaptureType':
                switch ($data) {
                    case 0:
                        return Horde_Image_Translation::t("Standard");
                    case 1:
                        return Horde_Image_Translation::t("Landscape");
                    case 2:
                        return Horde_Image_Translation::t("Portrait");
                    case 3:
                        return Horde_Image_Translation::t("Night Scene");
                    default:
                        return Horde_Image_Translation::t("Unknown");
                }
            case 'DateTime':
            case 'DateTimeOriginal':
            case 'DateTimeDigitized':
                return date('m/d/Y H:i:s O', $data);
            case 'UserComment':
                //@TODO: the first 8 bytes of this field contain the charset used
                //       to encode the comment. Either ASCII, JIS, UNICODE, or
                //       UNDEFINED. Should probably either convert to a known charset
                //       here and let the calling code deal with it, or allow this
                //       method to take an optional charset to convert to (would
                //       introduce a dependency on Horde_String to do the conversion).
                $data = trim(substr($data, 7));
            default:
                return !empty($data) ? $data : '---';
        }
    }

Usage Example

Exemplo n.º 1
0
 /**
  * Get the image attributes from the backend.
  *
  * @return array  A hash of Exif fieldnames => values.
  */
 public function getAttributes()
 {
     $attributes = $GLOBALS['injector']->getInstance('Ansel_Storage')->getImageAttributes($this->id);
     $params = !empty($GLOBALS['conf']['exif']['params']) ? $GLOBALS['conf']['exif']['params'] : array();
     $params['logger'] = $GLOBALS['injector']->getInstance('Horde_Log_Logger');
     $exif = Horde_Image_Exif::factory($GLOBALS['conf']['exif']['driver'], $params);
     $fields = Horde_Image_Exif::getFields($exif);
     $output = array();
     foreach ($fields as $field => $data) {
         if (!isset($attributes[$field])) {
             continue;
         }
         $output[$field] = $value = Horde_Image_Exif::getHumanReadable($field, Horde_String::convertCharset($attributes[$field], $GLOBALS['conf']['sql']['charset'], 'UTF-8'));
     }
     return $output;
 }