source: spip-zone/_plugins_/crop_image/trunk/formulaires/recadrer_image.php @ 102717

Last change on this file since 102717 was 102717, checked in by tofulm@…, 4 years ago

Ajout des autorisations
Pour les documents, utilise l'autorisation de medias : modifier document
pour les logos articles / rubriques : autorisation de modifier un article /rubrique

File size: 3.4 KB
Line 
1<?php
2if (!defined('_ECRIRE_INC_VERSION')) return;
3
4function formulaires_recadrer_image_charger_dist($objet="document", $id_objet, $redirect=''){
5        $valeurs = array();
6        if ($objet == "document") {
7                $valeurs['id_document'] = intval($id_objet);
8                if (autoriser('modifier','document',intval($id_objet))) {
9                        return $valeurs;
10                }
11        } elseif ($objet == "article") {
12                $valeurs['id_article'] = intval($id_objet);
13                if (autoriser('modifier','article',intval($id_objet))) {
14                        return $valeurs;
15                }
16        } elseif ($objet == "rubrique") {
17                $valeurs['id_rubrique'] = intval($id_objet);
18                if (autoriser('modifier','rubrique',intval($id_objet))) {
19                        return $valeurs;
20                }
21        }
22
23        return false;
24}
25
26function formulaires_recadrer_image_verifier_dist($objet="document", $id_objet, $redirect=''){
27        $erreurs = array();
28        // on ne recadre pas une image non modifiee
29        if ( intval(_request('w')) === 0 ) {
30                $erreurs['message_erreur'] = _T('jcrop:selectionner_region_obligatoire');
31        }
32        return $erreurs;
33}
34
35function formulaires_recadrer_image_traiter_dist($objet="document", $id_objet, $redirect=''){
36
37        $retour = array();
38        $fichier = _request('fichier');
39        if ($objet == "document") {
40                $fichier = find_in_path($fichier);
41        } else {
42                $fichier = _DIR_IMG.'/'.$fichier;
43        }
44
45        $modif = decoupe_img(
46                $fichier,
47                $fichier,
48                _request('x'),
49                _request('y'),
50                _request('w'),
51                _request('h')
52        );
53        // On modifie les valeurs taille/largeur/hauteur en bdd
54        if ($modif and $objet == "document") {
55                $set = array(
56                        'taille'  => filesize(find_in_path(_request('fichier'))),
57                        'largeur' => _request('w'),
58                        'hauteur' => _request('h')
59                );
60                include_spip('action/editer_objet');
61                $objet = "document";
62                objet_modifier($objet, intval($id_objet), $set);
63        }
64
65        if ($redirect) {
66                $retour['redirect'] = $redirect;
67        }
68        return $retour;
69}
70
71/**
72 * Recadrer/Découper une image jpg ou png
73 *
74 * @param $img_ini = CHEMIN+NOM_FICHIER image initiale,
75 * @param $img_fin = CHEMIN+NOM_FICHIER image finale,
76 * @param $x et $y = coordonnées x et y de la découpe de l'image
77 * @param $l et $h = largeur et hauteur max de l'image finale
78 * @param $detruire_ini = effacer l'original (true) ou le garder (false)
79 * @return return la taille de la nouvelle image
80 * @author cy_altern
81 **/
82function decoupe_img($img_ini, $img_fin, $x = 0, $y = 0, $w = 400, $h = 300, $detruire_ini=false) {
83        if (!file_exists($img_ini)) return 'Le fichier '.$img_ini.' n\'existe pas';
84        // déterminer le type de fonction de création d'image à utiliser
85        $param_img = getimagesize($img_ini);
86        $type_img = $param_img[2];
87        switch ($type_img) {
88        case 2 :
89                $fct_creation_ext = 'imagecreatefromjpeg';
90                $fct_ecrire = 'imagejpeg';
91                $ext_img = '.jpg';
92                break;
93        case 3 :
94                $fct_creation_ext = 'imagecreatefrompng';
95                $fct_ecrire = 'imagepng';
96                $ext_img = '.png';
97                break;
98        default :
99                return false;
100                break;
101        }
102        $img_nv = imagecreatetruecolor($w, $h);
103        $img_acopier = $fct_creation_ext($img_ini);
104        // gérer la transparence pour les images PNG (le mec qui a trouvé ce code est génial! :-)
105        if ($type_img == 3) {
106                imagecolortransparent($img_nv, imagecolorallocate($img_nv, 0, 0, 0));
107                imagealphablending($img_nv, false);
108                imagesavealpha($img_nv, true);
109        }
110        $res = imagecopyresampled($img_nv, $img_acopier, 0, 0, $x, $y, $w, $h, $w, $h);
111        // sauvegarder l'image et éventuellement détruire le fichier image initial
112        $fct_ecrire($img_nv, $img_fin);
113        imagedestroy($img_nv);
114        imagedestroy($img_acopier);
115        if ($detruire_ini == true) unlink($img_ini);
116        if ($res) {
117                return true;
118        } else {
119                return false;
120        }
121}
Note: See TracBrowser for help on using the repository browser.