Ignore:
Timestamp:
Jun 16, 2014, 5:56:30 AM (6 years ago)
Author:
kent1@…
Message:

Tout passe par inc/smush_image

Améliorations diverses

Version 0.4.0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/smush_images/trunk/inc/smush_image.php

    r80452 r83073  
    33
    44function inc_smush_image_dist($im){
    5        
    6         $image = _image_valeurs_trans($im, "smush");
    7         $im = $image["fichier"];
    8         $dest = $image["fichier_dest"];
    9         $creer = $image["creer"];
    10         if($creer && !_IS_BOT){
     5        if(!_IS_BOT){
    116                if(defined(_SMUSH_API) && _SMUSH_API){
    12                         //spip_log($image,'test.'._LOG_ERREUR);
     7                        $image = _image_valeurs_trans($im, "smush");
     8                        $im = $image["fichier"];
     9                        $dest = $image["fichier_dest"];
     10                        $creer = $image["creer"];
    1311                        include_spip('inc/smush_php_compat');
    14                         if(!file_exists($im)){
    15                                 spip_log("SMUSH : mauvais chemin pour la fonction smush_image","test."._LOG_ERREUR);
    16                                 return '';
    17                         }
    18                         spip_log("SMUSH : smush_image pour $im","smush");
     12                        if(!file_exists($im))
     13                                return $im;
    1914
    2015                        // L'adresse de l'API que l'on utilise
     
    2722                        $content = file_get_contents($url_smush_finale);
    2823                        $newcontent = json_decode($content, true);
    29 
    30                         spip_log($newcontent,"smush."._LOG_ERREUR);
    31 
    3224                        if(!$newcontent['error']){
    3325                                include_spip('inc/distant');
     
    3527                                spip_log("SMUSH : recuperation du fichier $new_url","smush");
    3628                                $contenu = recuperer_page($new_url,false,false,_COPIE_LOCALE_MAX_SIZE);
    37                                 if (!$contenu) return false;
    38                                 ecrire_fichier($im, $contenu);
     29                                if ($contenu)
     30                                        ecrire_fichier($im, $contenu);
    3931                        }else{
    40                                 spip_log('SMUSH en erreur','test.'._LOG_ERREUR);
    41                                 spip_log($newcontent['error'],'test.'._LOG_ERREUR);
     32                                spip_log('SMUSH en erreur','smush.'._LOG_ERREUR);
     33                                spip_log($newcontent['error'],'smush.'._LOG_ERREUR);
    4234                        }
    43                 }else{
    44                         if ($dest = image_smush($im, _DIR_TMP.basename($im).'-smush-'.getmypid())
    45                                 AND is_readable($dest)
    46                                 AND filesize($dest) > 0
    47                                 AND filesize($dest) < filesize($im)
    48                                 ){
    49                                         rename($dest,$im);
    50                                 }else if(file_exists($dest)){
    51                                         spip_unlink($dest);
    52                                 }else{
    53                                         spip_log('Fichier n existe pas','test.'._LOG_ERREUR);
    54                                 }
    55                 }
     35                        return $im;
     36                }else
     37                        return image_smush($im);
    5638        }
    57        
    58         return _image_ecrire_tag($image,array('src'=>$dest));
     39
     40        return $im;
    5941}
    6042
     43/**
     44 * Fonction de réduction d'image
     45 * Nécessite que la fonction exec() soit utilisable
     46 * Nécessite certains binaires sur le serveur :
     47 * -* identify : apt-get install imagemagick
     48 * -* convert : apt-get install imagemagick
     49 * -* pngnq : apt-get install pngnq
     50 * -* pngoptim : apt-get install pngoptim
     51 * -* jpegtran : apt-get install libjpeg-progs
     52 * -* gifsicle : apt-get install gifsicle
     53 *
     54 * @param string $im
     55 *              Le tag image (<img src...>) à réduire
     56 * @return string
     57 *              Le nouveau tag image
     58 */
    6159function image_smush($im) {
    6260        $fonction = array('smush', func_get_args());
    63         $image = _image_valeurs_trans($im, "",false,$fonction);
    64         if (!$image) return("");
     61        $image = _image_valeurs_trans($im, "smush",false,$fonction);
     62        if (!$image) $im;
    6563
    6664        $im = $image["fichier"];
     
    7169        // resultat plus beau, mais tres lourd
    7270        // Et: indispensable pour preserver transparence!
    73 
    7471        if ($creer) {
    7572                $format = trim(exec('identify -format %m '.$im));
    76 
     73                /**
     74                 * On récupère le nom de fichier sans extension
     75                 */
     76                $tmp = explode('.',$dest);
     77                array_pop($tmp);
     78                $tmp = join('.',$tmp);
     79               
     80                /**
     81                 * Si on est sur un GIF, on le transforme en PNG
     82                 * On utilise la commande convert pour cela
     83                 */
    7784                if ($format == 'GIF') {
    7885                        $dest = $tmp.'.png';
    7986                        exec('convert '.$im.' '.$dest);
    80                         $source = $dest;
     87                        $im = $dest;
    8188                        $format = 'PNG';
    8289                }
    83 
    84                 else if ($format == 'PNG') {
    85                         $nq = substr($source,0,-4).'-nq8.png';
    86                         exec('pngnq -f '.$im.' && optipng -o5 '.$nq.' -out '.$dest,$out);
     90               
     91                /**
     92                 * On est sur un PNG
     93                 */
     94                if ($format == 'PNG') {
     95                        $nq = substr($im,0,-4).'-nq8.png';
     96                        exec('pngnq '.$im.' && optipng -o5 '.$nq.' -out '.$dest,$out);
    8797                        if(file_exists($nq))
    8898                                spip_unlink($nq);
    89                         return $dest;
    9099                }
    91 
     100               
     101                /**
     102                 * On est sur un JPEG
     103                 */
    92104                else if ($format == 'JPEG') {
    93105                        $fsize = filesize($im);
     
    98110                                exec('jpegtran -copy none -progressive '.$im.' > '.$dest);
    99111                }
     112
     113                /**
     114                 * On est sur un GIF animé
     115                 */
     116                else if(preg_match('/^GIFGIF/',$format)){
     117                        $dest = $tmp.'.gif';
     118                        exec('gifsicle -O3 '.$im.' -o '.$dest);
     119                }
     120               
     121                /**
     122                 * Si la taille du résultat est supérieure à l'original,
     123                 * on retourne l'original en supprimant le fichier temporaire créé
     124                 */
     125                if(filesize($dest) > filesize($im)){
     126                        spip_unlink($dest);
     127                        $dest = $im;
     128                }
    100129        }
    101130        return _image_ecrire_tag($image,array('src'=>$dest));
Note: See TracChangeset for help on using the changeset viewer.