Changeset 83073 in spip-zone


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

Tout passe par inc/smush_image

Améliorations diverses

Version 0.4.0

Location:
_plugins_/smush_images/trunk
Files:
4 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));
  • _plugins_/smush_images/trunk/paquet.xml

    r80452 r83073  
    22        prefix="smush"
    33        categorie="performance"
    4         version="0.3.1"
     4        version="0.4.0"
    55        etat="test"
    66        compatibilite="[3.0.1;3.0.*]"
  • _plugins_/smush_images/trunk/smush_fonctions.php

    r72331 r83073  
    1010if (!defined("_ECRIRE_INC_VERSION")) return;
    1111
    12 $GLOBALS['spip_matrice']['image_smush'] = 'smush_pipelines.php';
     12$GLOBALS['spip_matrice']['image_smush'] = 'inc/smush_image.php';
    1313
    1414?>
  • _plugins_/smush_images/trunk/smush_pipelines.php

    r74489 r83073  
    2525        if(!function_exists('lire_config'))
    2626                include_spip('inc/config');
    27         if((!isset($GLOBALS['meta']['smush_casse']) || $GLOBALS['meta']['smush_casse'] != 'oui') && !defined('_SMUSH_INTERDIRE_AUTO') && (lire_config('smush/eviter_traitement_auto','off') != 'on'))
    28                 $flux = filtrer('image_smush',$flux);
     27        if((!isset($GLOBALS['meta']['smush_casse']) || $GLOBALS['meta']['smush_casse'] != 'oui') && !defined('_SMUSH_INTERDIRE_AUTO') && (lire_config('smush/eviter_traitement_auto','off') != 'on')){
     28                $smush = charger_fonction('smush_image','inc');
     29                $flux = $smush($flux);
     30        }
    2931        return $flux;
    30 }
    31 
    32 /**
    33  * Fonction de réduction d'image
    34  * Nécessite que la fonction exec() soit utilisable
    35  * Nécessite certains binaires sur le serveur :
    36  * -* identify : apt-get install imagemagick
    37  * -* convert : apt-get install imagemagick
    38  * -* pngnq : apt-get install pngnq
    39  * -* pngoptim : apt-get install pngoptim
    40  * -* jpegtran : apt-get install libjpeg-progs
    41  *
    42  * @param string $im
    43  *              Le tag image (<img src...>) à réduire
    44  * @return string
    45  *              Le nouveau tag image
    46  */
    47 function image_smush($im) {
    48         $fonction = array('smush', func_get_args());
    49         $image = _image_valeurs_trans($im,"smush",false,$fonction);
    50 
    51         if (!$image) return("");
    52 
    53         $im = $image["fichier"];
    54         $dest = $image["fichier_dest"];
    55 
    56         $creer = $image["creer"];
    57 
    58         if ($creer) {
    59                 $format = trim(exec('identify -format %m '.$im));
    60 
    61                 if ($format == 'GIF') {
    62                         $dest = $dest.'.png';
    63                         exec('convert '.$im.' '.$dest);
    64                         $source = $dest;
    65                         $format = 'PNG';
    66                 }
    67 
    68                 else if ($format == 'PNG') {
    69                         $nq = substr($im,0,-4).'-nq8.png';
    70                         exec('pngnq '.$im.' && optipng -o5 '.$nq.' -out '.$dest,$out);
    71                         if(file_exists($nq))
    72                                 spip_unlink($nq);
    73                 }
    74 
    75                 else if ($format == 'JPEG') {
    76                         $fsize = filesize($im);
    77                         if ($fsize < 10*1024)
    78                                 exec('jpegtran -copy none -optimize '.$im.' > '.$dest);
    79                         else
    80                                 exec('jpegtran -copy none -progressive '.$im.' > '.$dest);
    81                 }
    82         }
    83         return _image_ecrire_tag($image,array('src'=>$dest));
    8432}
    8533
Note: See TracChangeset for help on using the changeset viewer.