source: spip-zone/_plugins_/convertisseur/trunk/spip-cli/imageOptimiser.php @ 95086

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

regler la compression ou le rognage des images converties pouvoir surcharger une conversion dans mes_fonctions

File size: 3.8 KB
Line 
1<?php
2
3/***
4
5        Installer ImageMagick pour que cela fonctionne. (brew install imagemagick sous Mac)
6
7*/
8
9use Symfony\Component\Console\Command\Command;
10use Symfony\Component\Console\Input\InputArgument;
11use Symfony\Component\Console\Input\InputInterface;
12use Symfony\Component\Console\Input\InputOption;
13use Symfony\Component\Console\Output\OutputInterface;
14
15class optimg extends Command {
16        protected function configure() {
17                $this
18                        ->setName('images:optimiser')
19                        ->setDescription('Compression et redimensionnement en option d\'une ou plusieurs images')
20                        ->setAliases(array(
21                                'optimg' // abbréviation pas ouf pour ca
22                        ))
23                        ->addArgument(
24                'image',
25                InputArgument::OPTIONAL,
26                'Image à optimiser.'
27            )                   
28                        ->addOption(
29                                'source',
30                                's',
31                                InputOption::VALUE_OPTIONAL,
32                                'Répertoire source. Optimiser toutes les images d\'un répertoire. Exemple : `spip optimg -s IMG`.',
33                                '0'
34                        )
35                        ->addOption(
36                                'dest',
37                                'd',
38                                InputOption::VALUE_OPTIONAL,
39                                'Répertoire de destination. Exemple : `spip optimg -d mon_repertoire mon_image.jpg`. Si ce répertoire n\'est pas précisé, on écrase l\'image avec sa version optimisée.',
40                                '0'
41                        )
42                        ->addOption(
43                                'resize',
44                                'r',
45                                InputOption::VALUE_OPTIONAL,
46                                'Redimensionner la largeur à n px, en conservant les proportions pour calculer la hauteur. Exemple : `spip optimg -r 900 mon_image.jpg`',
47                                '0'
48                        )
49                        ->addOption(
50                                'compression',
51                                'c',
52                                InputOption::VALUE_OPTIONAL,
53                                'Compresser les images à 80%. Exemple : `spip optimg -c 80 mon_image.jpg`',
54                                '0'
55                        )
56
57                ;
58        }
59
60        protected function execute(InputInterface $input, OutputInterface $output) {
61                global $spip_racine;
62                global $spip_loaded;
63               
64                include_spip("iterateur/data");
65               
66                $source = $input->getOption('source') ;
67                $dest = $input->getOption('dest') ;
68                $resize = $input->getOption('resize') ;
69                $compression = $input->getOption('compression') ;
70                $image = $input->getArgument('image');
71               
72                if ($spip_loaded) {
73                        chdir($spip_racine);
74
75                        if (!function_exists('passthru')){
76                                $output->writeln("<error>Votre installation de PHP doit pouvoir exécuter des commandes externes avec la fonction passthru().</error>");
77                        }
78                        // Si c'est bon on continue
79                        else{                           
80                                if(strlen($dest) > 1){
81                                         $label_d=" dans $dest " ;
82                                         $param_d=" $dest" ;
83                                         if(!is_dir($dest))
84                                                mkdir($dest);
85                                }       
86                                if($resize > 0){
87                                        $label_r=" en redimensionnant la largeur à $resize px " ;
88                                }
89                                $param_r=" $resize" ;
90                               
91                                if($compression > 0){
92                                        $label_c=" en compressant à $compression % " ;
93                                        $param_c=" $compression" ;
94                                }
95                               
96                               
97                                // optimisation imagemagick
98                                if($image){
99                                        $output->writeln("<info>C'est parti pour une petite optimisation d'image ${label_r}${label_d}${label_c} !</info>");
100                                        passthru('plugins/convertisseur/scripts/optimg.sh ' . escapeshellarg($image) . $param_r . $param_d . $param_c);
101                                }       
102                                elseif($source){
103                                        $param_s = " $source" ;
104                                        $output->writeln("<info>C'est parti pour une petite optimisation des images de $source/ ${label_r}${label_d} !</info>");
105
106                                        $fichiers_jpg = preg_files($source . "/", "\.(jpg|tif)$"); # ou ...
107       
108                                        foreach($fichiers_jpg as $image){
109                                               
110                                                $path = explode("/", preg_replace(",^/,", "", dirname(str_replace($source, "", $image)))) ;
111                                               
112                                                # var_dump($path);
113                                                $dpt = $dest ;
114                                                foreach($path as $r){
115                                                        if(!is_dir("$dpt/$r")){
116                                                                mkdir("$dpt/$r");
117                                                                $dpt="$dpt/$r";
118                                                        }else
119                                                                $dpt="$dpt/$r";
120                                                }
121                                               
122                                                $param_d=" $dpt";
123
124                                                // Conversion imagemagick
125                                                passthru('plugins/convertisseur/scripts/optimg.sh ' . $image . $param_r . $param_d);
126                                        }
127                                }       
128                        }
129                }
130                else{
131                        $output->writeln('<error>Vous n’êtes pas dans une installation de SPIP. Impossible de convertir le texte.</error>');
132                }
133        }
134}
Note: See TracBrowser for help on using the repository browser.