Exemplo n.º 1
0
/**
 * Lire toutes les exifs d'une image
 * et les memoriser en static pour optimisation
 *
 * @param string $fichier
 * @return array
 */
function extraire_exif($fichier)
{
    static $mem_exif;
    if (isset($mem_exif[$fichier]) and $mem_exif[$fichier]) {
        return $mem_exif[$fichier];
    }
    if (!file_exists($fichier)) {
        return array();
    }
    $time = filemtime($fichier);
    $fichier_exif = sous_repertoire(_DIR_VAR, 'cache-exif') . md5($fichier . $time) . ".php";
    // Systeme de cache pour les variables exif
    if (file_exists($fichier_exif)) {
        lire_fichier($fichier_exif, $cache);
        if ($mem_exif[$fichier] = unserialize($cache)) {
            return $mem_exif[$fichier];
        }
    }
    include_spip("inc/exifReader");
    $er = new phpExifReader($fichier);
    $er->processFile();
    $mem_exif[$fichier] = $er->getImageInfo();
    // Essayer de trouver aux:Lens
    $mem_exif[$fichier]["auxLens"] = str_replace(" mm", " ", lire_aux_lens($fichier));
    // Completer GPS
    if (function_exists('exif_read_data')) {
        $exif_direc = @exif_read_data($fichier);
        // Si Latitude deja fixee, la traiter
        // Si la ref n'est ni N ni S, c'est une erreur (j'en trouve sur Flickr)
        if (!($exif_direc["GPSLatitudeRef"] == "N" || $exif_direc["GPSLatitudeRef"] == "S")) {
            unset($mem_exif[$fichier]["GPSLatitude"]);
        }
        if ($mem_exif[$fichier]["GPSLatitude"]) {
            $exif_direc["GPSLatitude"][0] = $mem_exif[$fichier]["GPSLatitude"]["Degrees"];
            $exif_direc["GPSLatitude"][1] = $mem_exif[$fichier]["GPSLatitude"]["Minutes"] * 100 + round($mem_exif[$fichier]["GPSLatitude"]["Seconds"] / 60 * 100) . "/100";
            $exif_direc["GPSLatitudeRef"] = $mem_exif[$fichier]["GPSLatitudeRef"];
        }
        // Traiter la Latitude
        // Retourne GPSLatitude en degres, minutes, secondes
        // Retour GPSLatitudeInt en valeur entiere pour Google
        if (isset($exif_direc["GPSLatitude"])) {
            $deg = $exif_direc["GPSLatitude"][0];
            if (strpos($deg, "/") > 0) {
                $deg = substr($deg, 0, strpos($deg, "/"));
            }
            $min = $exif_direc["GPSLatitude"][1];
            if (strpos($min, "/") > 0) {
                $minutes = substr($min, 0, strpos($min, "/"));
                $rap = substr($min, strpos($min, "/") + 1, 12);
                $minutes = $minutes / $rap;
                $secondes = ($minutes - floor($minutes)) * 60;
                $minutes = floor($minutes);
            }
            $N_S = $exif_direc["GPSLatitudeRef"];
            $mem_exif[$fichier]["GPSLatitude"] = $deg . "° {$minutes}" . "’" . " {$secondes}" . "” {$N_S}";
            // Retourne aussi une valeur entiere pour Google Maps
            $GPSLatitudeInt = $deg + $min / 6000;
            if ($N_S == "S") {
                $GPSLatitudeInt = -1 * $GPSLatitudeInt;
            }
            $mem_exif[$fichier]["GPSLatitudeInt"] = $GPSLatitudeInt;
        }
        // Verifier que la precedente ref est E/W, sinon ne pas traiter
        if (!($exif_direc["GPSLongitudeRef"] == "E" || $exif_direc["GPSLongitudeRef"] == "W")) {
            unset($mem_exif[$fichier]["GPSLongitude"]);
        }
        if ($mem_exif[$fichier]["GPSLongitude"]) {
            $exif_direc["GPSLongitude"][0] = $mem_exif[$fichier]["GPSLongitude"]["Degrees"];
            $exif_direc["GPSLongitude"][1] = $mem_exif[$fichier]["GPSLongitude"]["Minutes"] * 100 + round($mem_exif[$fichier]["GPSLongitude"]["Seconds"] / 60 * 100) . "/100";
            $exif_direc["GPSLongitudeRef"] = $mem_exif[$fichier]["GPSLongitudeRef"];
        }
        // Traiter longitude
        if (isset($exif_direc["GPSLongitude"])) {
            $deg = $exif_direc["GPSLongitude"][0];
            if (strpos($deg, "/") > 0) {
                $deg = substr($deg, 0, strpos($deg, "/"));
            }
            $min = $exif_direc["GPSLongitude"][1];
            if (strpos($min, "/") > 0) {
                $minutes = substr($min, 0, strpos($min, "/"));
                $rap = substr($min, strpos($min, "/") + 1, 12);
                $minutes = $minutes / $rap;
                $secondes = ($minutes - floor($minutes)) * 60;
                $minutes = floor($minutes);
            }
            $W_E = $exif_direc["GPSLongitudeRef"];
            $mem_exif[$fichier]["GPSLongitude"] = $deg . "° {$minutes}" . "’" . " {$secondes}" . "” {$W_E}";
            // Retourne aussi une valeur entiere pour Google Maps
            $GPSLongitudeInt = $deg + $min / 6000;
            if ($W_E == "W") {
                $GPSLongitudeInt = -1 * $GPSLongitudeInt;
            }
            $mem_exif[$fichier]["GPSLongitudeInt"] = $GPSLongitudeInt;
        }
    }
    ecrire_fichier($fichier_exif, serialize($mem_exif[$fichier]));
    return $mem_exif[$fichier];
}
Exemplo n.º 2
0
function get_exif_size($filename, $image_name)
{
    set_error_handler("on_error_no_output");
    // is needed because error are most likly but we don't care about fields we don't even know
    $er = new phpExifReader($filename);
    $er->processFile();
    $exif_info = $er->getImageInfo();
    set_error_handler("on_error");
    $size_array = array();
    $size_array[2] = 2;
    if (isset($er->ImageInfo[TAG_EXIF_IMAGEWIDTH])) {
        $size_array[0] = $er->ImageInfo[TAG_EXIF_IMAGEWIDTH];
    } else {
        $size_array[0] = 1024;
        debug("Size of image " . $image_name . " cannot be detected using 1024x768.");
    }
    if (isset($er->ImageInfo[TAG_EXIF_IMAGELENGTH])) {
        $size_array[1] = $er->ImageInfo[TAG_EXIF_IMAGELENGTH];
    } else {
        $size_array[1] = 768;
    }
    return $size_array;
}
Exemplo n.º 3
0
 /**
  * Get EXIF of file
  *
  * @param string $filename
  * @return array
  */
 public function getExif($filename = null)
 {
     if (is_null($filename)) {
         return false;
     }
     App::import('Vendor', 'Nodeattachment.exif-reader.php');
     $er = new phpExifReader($filename);
     $er->processFile();
     return $er->getImageInfo();
 }