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

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

attention aux espaces et autres joyeusetés dans les noms de fichiers

File size: 3.4 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                ;
50        }
51
52        protected function execute(InputInterface $input, OutputInterface $output) {
53                global $spip_racine;
54                global $spip_loaded;
55               
56                include_spip("iterateur/data");
57               
58                $source = $input->getOption('source') ;
59                $dest = $input->getOption('dest') ;
60                $resize = $input->getOption('resize') ;
61                $image = $input->getArgument('image');
62               
63                if ($spip_loaded) {
64                        chdir($spip_racine);
65
66                        if (!function_exists('passthru')){
67                                $output->writeln("<error>Votre installation de PHP doit pouvoir exécuter des commandes externes avec la fonction passthru().</error>");
68                        }
69                        // Si c'est bon on continue
70                        else{                           
71                                if(strlen($dest) > 1){
72                                         $label_d=" dans $dest " ;
73                                         $param_d=" $dest" ;
74                                         if(!is_dir($dest))
75                                                mkdir($dest);
76                                }       
77                                if($resize > 0){
78                                        $label_r=" en redimensionnant la largeur à $resize px " ;
79                                }
80                                $param_r=" $resize" ;
81                               
82                                // optimisation imagemagick
83                                if($image){
84                                        $output->writeln("<info>C'est parti pour une petite optimisation d'image ${label_r}${label_d} !</info>");
85                                        passthru('plugins/convertisseur/scripts/optimg.sh ' . escapeshellarg($image) . $param_r . $param_d);
86                                }       
87                                elseif($source){
88                                        $param_s = " $source" ;
89                                        $output->writeln("<info>C'est parti pour une petite optimisation des images de $source/ ${label_r}${label_d} !</info>");
90
91                                        $fichiers_jpg = preg_files($source . "/", "\.(jpg|tif)$"); # ou ...
92       
93                                        foreach($fichiers_jpg as $image){
94                                               
95                                                $path = explode("/", preg_replace(",^/,", "", dirname(str_replace($source, "", $image)))) ;
96                                               
97                                                # var_dump($path);
98                                                $dpt = $dest ;
99                                                foreach($path as $r){
100                                                        if(!is_dir("$dpt/$r")){
101                                                                mkdir("$dpt/$r");
102                                                                $dpt="$dpt/$r";
103                                                        }else
104                                                                $dpt="$dpt/$r";
105                                                }
106                                               
107                                                $param_d=" $dpt";
108
109                                                // Conversion imagemagick
110                                                passthru('plugins/convertisseur/scripts/optimg.sh ' . $image . $param_r . $param_d);
111                                        }
112                                }       
113                        }
114                }
115                else{
116                        $output->writeln('<error>Vous n’êtes pas dans une installation de SPIP. Impossible de convertir le texte.</error>');
117                }
118        }
119}
Note: See TracBrowser for help on using the repository browser.