source: spip-zone/_plugins_/convertisseur/trunk/spip-cli/ConvertisseurImagesOptimiser.php @ 110977

Last change on this file since 110977 was 110977, checked in by root, 10 months ago

bien nommer les spip-cli

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