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

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

indentation

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        protected function execute(InputInterface $input, OutputInterface $output) {
62                global $spip_racine;
63                global $spip_loaded;
64               
65                include_spip("iterateur/data");
66               
67                $source = $input->getOption('source') ;
68                $dest = $input->getOption('dest') ;
69                $resize = $input->getOption('resize') ;
70                $compression = $input->getOption('compression') ;
71                $image = $input->getArgument('image');
72               
73                if ($spip_loaded) {
74                        chdir($spip_racine);
75
76                        if (!function_exists('passthru')){
77                                $output->writeln("<error>Votre installation de PHP doit pouvoir exécuter des commandes externes avec la fonction passthru().</error>");
78                        }
79                        // Si c'est bon on continue
80                        else{
81                                if(strlen($dest) > 1){
82                                        $label_d=" dans $dest" ;
83                                        if(!is_dir($dest))
84                                                mkdir($dest);
85                                }
86                                $param_d=" $dest" ;
87                                if($resize > 0){
88                                        $label_r=" en redimensionnant la largeur à $resize px " ;
89                                }
90                                $param_r=" $resize" ;
91                               
92                                if($compression > 0){
93                                        $label_c=" en compressant à $compression % " ;
94                                }
95                                $param_c=" $compression" ;
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}/${label_c} !</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                                                if($path[0] != "")
115                                                        foreach($path as $r){
116                                                                if(!is_dir("$dpt/$r")){
117                                                                        mkdir("$dpt/$r");
118                                                                        $dpt="$dpt/$r";
119                                                                }else
120                                                                        $dpt="$dpt/$r";
121                                                        }
122                                               
123                                                $param_d=" $dpt";
124                                               
125                                                // Conversion imagemagick
126                                                passthru('plugins/convertisseur/scripts/optimg.sh ' . escapeshellarg($image) . $param_r . $param_d . $param_c);
127                                        }
128                                }
129                        }
130                }
131                else{
132                        $output->writeln('<error>Vous n’êtes pas dans une installation de SPIP. Impossible de convertir le texte.</error>');
133                }
134        }
135}
Note: See TracBrowser for help on using the repository browser.