source: spip-zone/_plugins_/gestion_documents/action/tourner.php @ 39202

Last change on this file since 39202 was 39202, checked in by brunobergot@…, 11 years ago

Fonction manquante dans la mediatheque qui surcharge action/tourner de SPIP. Il me semble qu'il y a un manque dans action_ajouter_un_document_dist() de la mediatheque par rapport à ajouter_un_document() de SPIP qui appelle bien tourner_selon_exif_orientation si defined('_TOURNER_SELON_EXIF') == true...

File size: 3.9 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2009                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15// http://doc.spip.org/@action_tourner_dist
16function action_tourner_dist() {
17        $securiser_action = charger_fonction('securiser_action', 'inc');
18        $arg = $securiser_action();
19
20        if (!preg_match(",^\W*(\d+)\W?(-?\d+)$,", $arg, $r)) {
21                spip_log("action_tourner_dist $arg pas compris");
22        } else  action_tourner_post($r[1],$r[2]);
23}
24
25// http://doc.spip.org/@action_tourner_post
26function action_tourner_post($id_document,$angle)
27{
28        $row = sql_fetsel("fichier,extension", "spip_documents", "id_document=".intval($id_document));
29
30        if (!$row) return;
31
32        include_spip('inc/charsets');   # pour le nom de fichier
33        include_spip('inc/documents'); 
34        // Fichier destination : on essaie toujours de repartir de l'original
35        $var_rot = $angle;
36
37        include_spip('inc/distant'); # pour copie_locale
38        $src = _DIR_RACINE . copie_locale(get_spip_doc($row['fichier']));
39        if (preg_match(',^(.*)-r(90|180|270)\.([^.]+)$,', $src, $match)) {
40                $effacer = $src;
41                $src = $match[1].'.'.$match[3];
42                $var_rot += intval($match[2]);
43        }
44        $var_rot = ((360 + $var_rot) % 360); // 0, 90, 180 ou 270
45
46        if ($var_rot > 0) {
47                $dest = preg_replace(',\.[^.]+$,', '-r'.$var_rot.'$0', $src);
48                spip_log("rotation $var_rot $src : $dest");
49
50                include_spip('inc/filtres');
51                include_spip('public/parametrer'); // charger les fichiers fonctions #bugfix spip 2.1.0
52                $res = filtrer('image_rotation',$src,$var_rot);
53                $res = filtrer('image_format',$res,$row['extension']);
54
55                list($hauteur,$largeur) = taille_image($res);
56                $res = extraire_attribut($res,'src');
57
58                include_spip('inc/getdocument');
59                deplacer_fichier_upload($res,$dest);
60        }
61        else {
62                $dest = $src;
63                $size_image = @getimagesize($dest);
64                $largeur = $size_image[0];
65                $hauteur = $size_image[1];
66        }
67
68        // succes !
69        if ($largeur>0 AND $hauteur>0) {
70                $set = array(
71                        'fichier' => set_spip_doc($dest),
72                        'largeur'=>$largeur, 'hauteur'=>$hauteur,
73                        'distant'=>'non' // le document n'est plus distant apres une transformation
74                        );
75                if ($taille = @filesize($dest))
76                        $set['taille'] = $taille;
77                sql_updateq('spip_documents', $set, "id_document=".intval($id_document));
78                if ($effacer) {
79                        spip_log("rotation : j'efface $effacer");
80                        spip_unlink($effacer);
81                }
82                // pipeline pour les plugins
83                pipeline('post_edition',
84                        array(
85                                'args' => array(
86                                        'table' => 'spip_documents',
87                                        'table_objet' => 'documents',
88                                        'spip_table_objet' => 'spip_documents',
89                                        'type' =>'document',
90                                        'id_objet' => $id_document,
91                                        'champs' => array('rotation'=>$angle,'orientation'=>$var_rot,'fichier'=>$row['fichier']),
92                                        'serveur' => $serveur,
93                                        'action'=>'tourner',
94                                ),
95                                'data' => $set
96                        )
97                );
98        }
99
100}
101
102// Appliquer l'EXIF orientation
103// cf. http://trac.rezo.net/trac/spip/ticket/1494
104// http://doc.spip.org/@tourner_selon_exif_orientation
105function tourner_selon_exif_orientation($id_document, $fichier) {
106
107        if (function_exists('exif_read_data')
108        AND $exif = exif_read_data($fichier)
109        AND (
110                $ort = $exif['IFD0']['Orientation']
111                OR $ort = $exif['Orientation'])
112        ) {
113        spip_log("rotation: $ort");
114                $rot = null;
115                switch ($ort) {
116                        case 3:
117                                $rot = 180;
118                        case 6:
119                                $rot = 90;
120                        case 8:
121                                $rot = -90;
122                }
123                if ($rot)
124                        action_tourner_post(array(null,$id_document, $rot));
125        }
126}
127
128?>
Note: See TracBrowser for help on using the repository browser.