Changeset 54576 in spip-zone


Ignore:
Timestamp:
Nov 18, 2011, 12:58:47 AM (8 years ago)
Author:
patfr@…
Message:

Quelques optims de code
+ tenir compte var_mode=calcul ou recalcul pour recalculer les images
+ virer les ereg()
+ surharges d'images :

  • des dossiers img/diag_echecsNNX peuvent être ajoutés dans les squelettes
  • des échiquiers peuvent être ajoutés dans les squelette (dossier img/echiquiers/)
Location:
_plugins_/jeux/jeux
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/jeux/jeux/diag_echecs.php

    r54534 r54576  
    8080        $flip = jeux_config('flip');
    8181        $taille = intval(jeux_config('taille'));
     82        $redim = intval(jeux_config('redim'));
    8283        $nbjour = intval(jeux_config('cache')); // nombre de jour avant recalcul
    8384        $bordure = intval(jeux_config('bordure'));
    84         $board_size = intval(jeux_config('board_size'));
     85        $board_size = jeux_config('board_size');
    8586        $font = intval(jeux_config('police'));
    8687        $img = jeux_config('img_img');
     
    115116        list(,,,$size) = @getimagesize($fichier_dest);
    116117        $image = "<img class=\"no_image_filtrer \" src=\"$fichier_dest\" alt=\"$position\" title=\"$position\" border=\"0\" $size/><br>\n";
    117         // pas de recalcul de l'image pendant 12 heures si le fichier existe deja
    118         /*if (file_exists($fichier_dest)
    119                         AND ($GLOBALS['var_mode'] != 'recalcul') AND ($GLOBALS['var_mode'] != 'calcul')
    120                         AND (time()-@filemtime($fichier_dest) < 12*3600))
    121                  return $image;*/
     118
     119        // pas de recalcul de l'image pendant 30 jours si le fichier existe deja
    122120        if (file_exists($fichier_dest)
     121                        AND (_request('var_mode') != 'recalcul') AND (_request('var_mode') != 'calcul')
    123122                        AND (time()-@filemtime($fichier_dest) < 24*3600*$nbjour))
    124123                 return $image;
     
    136135                        foreach($surb[1] as $square)
    137136                                switch(strlen($square)) {
    138                                         case 2: diag_echecs_hilite_square($chessboard, $square, 'h'.$surb[0], $flip); break; // case de couleur
    139                                         case 5: diag_echecs_hilite_line($chessboard, $square, 'h'.$surb[0], $flip); break; // ligne de couleur
     137                                        // case de couleur : forme a1
     138                                        case 2: diag_echecs_hilite_square($chessboard, $square, 'h'.$surb[0], $flip); break;
     139                                        // ligne de couleur : forme a1-g8
     140                                        case 5: diag_echecs_hilite_line($chessboard, $square, 'h'.$surb[0], $flip); break;
    140141                                }
    141142
     
    229230       
    230231        // ************* redimensionement final *************
    231         if (strlen(jeux_config('redim'))>0) {
     232        if ($redim) {
    232233                if (jeux_config('coords')) { $nbcases=9; } else { $nbcases=8; }
    233                 $newsize = intval(jeux_config('redim')) / intval(jeux_config('taille'));
    234                 if ($newsize>3) {$newsize=3;}; // taille maximale pour éviter les erreurs
     234                $newsize = $redim / $taille;
     235                if ($newsize>3) $newsize=3; // taille maximale pour eviter les erreurs
    235236                $img_finale = imagecreatetruecolor(round($newsize*imagesx($chessboard)),round($newsize*imagesy($chessboard)));
    236237                imagecopyresampled($img_finale,$chessboard,0,0,0,0,round($newsize*imagesx($chessboard)),round($newsize*imagesy($chessboard)),imagesx($chessboard),imagesy($chessboard));
    237                 // converti l'image en 256 couleurs si truecolor=non
    238                 if (!jeux_config('truecolor')) { imagetruecolortopalette($img_finale,false,256); };     
     238                // convertir l'image en 256 couleurs si truecolor=non
     239                if (!jeux_config('truecolor')) imagetruecolortopalette($img_finale,false,256)
    239240                $img($img_finale, $fichier_dest);
    240241        }
    241242        else {
    242                 // converti l'image en 256 couleurs si truecolor=non
    243                 if (!jeux_config('truecolor')) { imagetruecolortopalette($chessboard,false,256); };     
     243                // convertir l'image en 256 couleurs si truecolor=non
     244                if (!jeux_config('truecolor')) imagetruecolortopalette($chessboard,false,256)
    244245                $img($chessboard, $fichier_dest);
    245246        }
  • _plugins_/jeux/jeux/diag_echecs_inc.php

    r54534 r54576  
    99  $fen = explode(" ", $fen);
    1010  /* FEN complete = 6, abregee = 1 */
    11   if ( count($fen) != 6  && count($fen) != 1 ) {
     11  if (count($fen) != 6  && count($fen) != 1)
    1212    die("Erreur dans la syntaxe dans la position FEN (nb de champs = count($fen)) !");
    13   }
     13
    1414  $side = $fen[1];
    1515  $fen = explode("/", $fen[0]);
    16   if ( count($fen) != 8  ) {
     16  if (count($fen) != 8)
    1717    die("Erreur dans la syntaxe dans la position FEN (nb de ligne) !");
    18   }
    1918
    2019  for ($i = 0; $i < 8; $i++) {
    2120    $fen[$i]=trim($fen[$i]);
    2221    for ($j = 0, $col = 0; $j < strlen($fen[$i]), $col < 8; $j++ ) {
    23       if ( ereg("[KQBNRP]", $fen[$i][$j] ) ) {
    24         if (strlen($w)>2) {
    25           $w.=",";
    26         }
     22      if (preg_match(',[KQBNRP],', $fen[$i][$j])) {
     23        if (strlen($w)>2) $w .= ",";
    2724        $w .= ($diag_echecs_globales['english2french'][strtolower($fen[$i][$j])] . ($diag_echecs_globales['colonnes'][$col++]) . (8 - $i));
    2825      }
    29       elseif ( ereg("[kqbnrp]", $fen[$i][$j] ) ) {
    30         if (strlen($b)>2) {
    31           $b.=",";
    32         }
     26      elseif (preg_match(',[kqbnrp],', $fen[$i][$j])) {
     27        if (strlen($b)>2) $b .= ",";
    3328        $b .= ($diag_echecs_globales['english2french'][$fen[$i][$j]] . ($diag_echecs_globales['colonnes'][$col++]) . (8 - $i));
    3429      }
    35       elseif ( ereg("[1-8]", $fen[$i][$j] ) ) {
     30      elseif (preg_match(',[1-8],', $fen[$i][$j]))
    3631        $col += $fen[$i][$j] ;
    37      } else {
    38       die("Erreur dans la syntaxe dans la position FEN - caractere : $w/$b - ".$fen[$i][$j]);
    39       }
     32      else
     33        die("Erreur dans la syntaxe dans la position FEN - caractere : $w/$b - ".$fen[$i][$j]);
    4034    }
    4135  }
    42   if ($side == "w") {
    43     return ($w . "/" . $b);
    44   } else {
    45     /* 'est aux noirs de jouer on retourne l'echiquier ! */
    46     return ($w . "/" . $b . "/r" );
    47   }
     36  if ($side == "w")
     37    return $w . '/' . $b;
     38  // ici c'est aux noirs de jouer, on retourne l'echiquier !
     39  return $w . '/' . $b . '/r' ;
    4840}
    4941
     
    5648        $taille = intval(jeux_config('taille'));
    5749        $bordure = intval(jeux_config('bordure'));
    58         $board_size = intval(jeux_config('board_size'));
    59 
    60        
    61         // ***************** Ouvre une image pour l'échiquier *******************
    62         if (strlen(jeux_config('plateau'))>1 )  {
    63         // si une image d'échiqier est utilisé
    64         $nomfichier=jeux_config('plateau');
    65         $url = _DIR_PLUGIN_JEUX.'img/echiquiers/'.$nomfichier;
    66         if (file_exists($url)) {
    67                 $board=imagecreatefrompng($url);
    68                 if(!$board) { die("Erreur lors de l'ouverture du fichier : ".jeux_config('plateau')); }
    69                 list($width, $height) = getimagesize($url); //récupère la largeur on suppose l'image carrée
    70                 $board_size = $width;
    71                 jeux_config_set('board_size', $width);                 
    72                 if(strpos($nomfichier,'(')<>0) { //si le nom du fichier contient les coordonnées de l'origine
    73                         $xori=substr($nomfichier,strpos($nomfichier,'(')+1,strpos($nomfichier,'-')-strpos($nomfichier,'(')-1);
    74                         $yori=substr($nomfichier,strpos($nomfichier,'-')+1,strpos($nomfichier,')')-strpos($nomfichier,'-')-1);
    75                         jeux_config_set('xori', $xori);
    76                         jeux_config_set('yori', $yori);         
     50        $board_size = jeux_config('board_size');
     51        $nomfichier = jeux_config('plateau');
     52       
     53        if ($nomfichier && ($url = find_in_path('img/echiquiers/' . $nomfichier))){
     54                // ici une image d'echiquier est demandee
     55                $board = imagecreatefrompng($url);
     56                if(!$board)
     57                        die("Erreur lors de la creation de l'image : img/echiquiers/$nomfichier");
     58                // recupere la largeur (on suppose l'image carree)
     59                list($board_size, $height) = getimagesize($url);
     60                jeux_config_set('board_size', $board_size);                     
     61
     62                // le nom du fichier peut contenir les coordonnees de l'origine entre parentheses
     63                // format a utiliser : monplato(12-12).png
     64                if(preg_match(',\((\d+)\-(\d+)\),', $nomfichier, $regs)) {
     65                        jeux_config_set('xori', $regs[1]);
     66                        jeux_config_set('yori', $regs[2]);             
    7767                } else {
    78                         jeux_config_set('xori', '0');
    79                         jeux_config_set('yori', '0');           
     68                        jeux_config_set('xori', 0);
     69                        jeux_config_set('yori', 0);             
    8070                }               
    81         }
    82        
    83        
    84 
    85   }
    86         else {
     71        } else {
     72          // pas d'image pour l'echiquier
    8773          $board = imagecreatetruecolor($board_size,$board_size);
    8874          $light_color = imagecolorallocate($board,$light[0],$light[1],$light[2]);
     
    9581                  if (($i+$j) & 1) imagecopy($board,$square,$i*$taille,$j*$taille,0,0,$taille,$taille);
    9682        }
    97         if ($bordure<>0)        { //inutile autrement
     83        if ($bordure)   {
     84                // inutile autrement
    9885                $chessboard = imagecreatetruecolor($board_size+2*$bordure,$board_size+2*$bordure);
    9986                $black_color = imagecolorallocate($chessboard,0,0,0);
     
    10289                return $chessboard;
    10390        }
    104         else return $board;
    105        
    106  
     91        return $board;
    10792}
    10893
     
    11499        $taille = intval(jeux_config('taille'));
    115100        $bordure = intval(jeux_config('bordure'));
    116         $letter = $square[0];//substr($square,0,1);
    117         $number = $square[1];//substr($square,1,1);
    118        
    119   if ((!(ereg("[a-h]",$letter,$match1))) or (!(ereg("[1-8]",$number,$match2))))
    120         die("Erreur dans la syntaxe (diag_echecs_put_piece)!");
    121        
    122         $xori=intval(jeux_config('xori'));
    123         $yori=intval(jeux_config('yori'));
    124 
    125   $url = jeux_config('base_url').$side.$diag_echecs_globales['english'][$name].jeux_config('img_suffix');
    126   $img_create = jeux_config('img_create');
    127   $file = $img_create($url);
    128   if (!$flip) {
    129     imagecopy($chessboard,$file,($diag_echecs_globales['letter2number'][$letter]-1)*$taille+$bordure+$xori,(8-$number)*$taille+$bordure+$yori,0,0,$taille,$taille);
    130   } else {
    131     imagecopy($chessboard,$file,(8-$diag_echecs_globales['letter2number'][$letter])*$taille+$bordure+$xori,($number-1)*$taille+$bordure+$yori,0,0,$taille,$taille);
    132   }
     101        $xori = jeux_config('xori');
     102        $yori = jeux_config('yori');
     103
     104        $letter = $square[0]; // substr($square,0,1);
     105        $number = $square[1]; // substr($square,1,1);
     106       
     107        if (!preg_match(',[a-h],',$letter,$match1) || !preg_match(',[1-8],',$number,$match2))
     108                die("Erreur dans la syntaxe (diag_echecs_put_piece)!");
     109
     110        $url = jeux_config('base_url').$side.$diag_echecs_globales['english'][$name].jeux_config('img_suffix');
     111        $img_create = jeux_config('img_create');
     112        $file = $img_create($url);
     113        if (!$flip)
     114                imagecopy($chessboard,$file,($diag_echecs_globales['letter2number'][$letter]-1)*$taille+$bordure+$xori,
     115                        (8-$number)*$taille+$bordure+$yori,0,0,$taille,$taille);
     116        else
     117                imagecopy($chessboard,$file,(8-$diag_echecs_globales['letter2number'][$letter])*$taille+$bordure+$xori,
     118                        ($number-1)*$taille+$bordure+$yori,0,0,$taille,$taille);
    133119}
    134120
     
    141127        $taille = intval(jeux_config('taille'));
    142128        $bordure = intval(jeux_config('bordure'));
    143         $board_size = intval(jeux_config('board_size'));
     129        $board_size = jeux_config('board_size');
    144130        $letter = substr($square,0,1);
    145131        $number = substr($square,1,1);
    146        
    147         $xori=intval(jeux_config('xori'));
    148         $yori=intval(jeux_config('yori'));
    149 
    150   if ((!(ereg("[a-h]",$letter,$match1))) or (!(ereg("[1-8]",$number,$match2))))
    151         die("Erreur dans la syntaxe (diag_echecs_hilite_square)!");
     132        $xori = intval(jeux_config('xori'));
     133        $yori = intval(jeux_config('yori'));
     134
     135        if (!preg_match(',[a-h],',$letter,$match1) || !preg_match(',[1-8],',$number,$match2))
     136                die("Erreur dans la syntaxe (diag_echecs_hilite_square)!");
    152137
    153138        $color = $diag_echecs_globales[$hilite];
     
    155140        $hilite_color = imagecolorallocatealpha($square,$color[0],$color[1],$color[2],50);
    156141        imagefill($square,0,0,$hilite_color);
    157   if (!$flip) {
    158         imagecopy($chessboard,$square,($diag_echecs_globales['letter2number'][$letter]-1)*$taille+$bordure+$xori,(8-$number)*$taille+$bordure+$yori,0,0,$taille,$taille);
    159   } else {
    160         imagecopy($chessboard,$square,(8-$diag_echecs_globales['letter2number'][$letter])*$taille+$bordure+$xori,($number-1)*$taille+$bordure+$yori,0,0,$taille,$taille);
    161   }
    162 
    163 }
    164 // trace une ligne colorée sur l'échiquier
    165 function diag_echecs_hilite_line($image, $squares, $hilite ,$flip)
    166 {   
     142        if (!$flip)
     143                imagecopy($chessboard,$square,($diag_echecs_globales['letter2number'][$letter]-1)*$taille+$bordure+$xori,
     144                        (8-$number)*$taille+$bordure+$yori,0,0,$taille,$taille);
     145        else
     146                imagecopy($chessboard,$square,(8-$diag_echecs_globales['letter2number'][$letter])*$taille+$bordure+$xori,
     147                        ($number-1)*$taille+$bordure+$yori,0,0,$taille,$taille);
     148}
     149
     150// trace une ligne coloree sur l'echiquier
     151function diag_echecs_hilite_line($image, $squares, $hilite ,$flip) {
    167152        global $diag_echecs_globales;
    168153        $taille = intval(jeux_config('taille'));
    169154        $bordure = intval(jeux_config('bordure'));
    170        
    171         //épaisseur de la ligne
    172         $thick=round($taille/7);
    173         if ($taille==35) {$thick= 5;};
    174         if ($taille==55) {$thick= 7;};   
    175        
    176         //$squares est de la forme a1-g8
    177         $xfrom = substr($squares,0,1);
    178         $yfrom = substr($squares,1,1); 
    179         $xto = substr($squares,3,1);
    180         $yto = substr($squares,4,1);
    181        
    182         $xori=intval(jeux_config('xori'));
    183         $yori=intval(jeux_config('yori'));
     155        $xori = intval(jeux_config('xori'));
     156        $yori = intval(jeux_config('yori'));
     157       
     158        // epaisseur de la ligne
     159        switch($taille) {
     160                case 35 : $thick = 5; break;
     161                case 55 : $thick = 7; break;
     162                default : $thick = round($taille / 7);
     163        }
     164       
     165        // $squares est de la forme a1-g8
     166        list(,$xfrom,$yfrom,,$xto,$yto ) = preg_split('//', $squares); // str_split() mieux, mais on reste compatible PHP 4
    184167       
    185168        $color = $diag_echecs_globales[$hilite];
     
    187170       
    188171        if (!$flip) {
    189                 $x1=round(($diag_echecs_globales['letter2number'][$xfrom]-1)*$taille+$bordure+$taille/2)-1+$xori;
    190                 $y1=round((8-$yfrom)*$taille+$bordure+$taille/2)-1+$yori;
    191                 $x2=round(($diag_echecs_globales['letter2number'][$xto]-1)*$taille+$bordure+$taille/2)-1+$xori;
    192                 $y2=round((8-$yto)*$taille+$bordure+$taille/2)-1+$yori;
    193   } else {
    194                 $x1=round((8-$diag_echecs_globales['letter2number'][$xfrom])*$taille+$bordure+$taille/2)-1+$xori;
    195                 $y1=round(($yfrom-1)*$taille+$bordure+$taille/2)-1+$yori;
    196                 $x2=round((8-$diag_echecs_globales['letter2number'][$xto])*$taille+$bordure+$taille/2)-1+$xori;
    197                 $y2=round(($yto-1)*$taille+$bordure+$taille/2)-1+$yori;         
    198   }
     172                $x1 = round(($diag_echecs_globales['letter2number'][$xfrom]-1)*$taille+$bordure+$taille/2)-1+$xori;
     173                $y1 = round((8-$yfrom)*$taille+$bordure+$taille/2)-1+$yori;
     174                $x2 = round(($diag_echecs_globales['letter2number'][$xto]-1)*$taille+$bordure+$taille/2)-1+$xori;
     175                $y2 = round((8-$yto)*$taille+$bordure+$taille/2)-1+$yori;
     176        } else {
     177                $x1 = round((8-$diag_echecs_globales['letter2number'][$xfrom])*$taille+$bordure+$taille/2)-1+$xori;
     178                $y1 = round(($yfrom-1)*$taille+$bordure+$taille/2)-1+$yori;
     179                $x2 = round((8-$diag_echecs_globales['letter2number'][$xto])*$taille+$bordure+$taille/2)-1+$xori;
     180                $y2 = round(($yto-1)*$taille+$bordure+$taille/2)-1+$yori;               
     181        }
    199182 
    200         // cercle aux extrémités en attendant une vraie flèche
     183        // cercle aux extremites en attendant une vraie fleche
    201184        imagefilledellipse($image, $x1,$y1,$thick*2,$thick*2,$hilite_color);   
    202185        imagefilledellipse($image, $x2,$y2,$thick*2,$thick*2,$hilite_color);   
    203186 
    204     if ($thick == 1) {
     187    if ($thick == 1)
    205188        return imageline($image, $x1, $y1, $x2, $y2, $hilite_color);
    206     }
     189
    207190    $t = round($thick / 2)-1 ;
    208     if ($x1 == $x2 || $y1 == $y2) {
     191    if ($x1 == $x2 || $y1 == $y2)
    209192        return imagefilledrectangle($image, round(min($x1, $x2) - $t), round(min($y1, $y2) - $t), round(max($x1, $x2) + $t), round(max($y1, $y2) + $t), $hilite_color);
    210     }
    211         // alors là, bonjour les équations de droites !
     193
     194        // alors la, bonjour les equations de droites !
    212195        $k = ($y2 - $y1) / ($x2 - $x1); //y = kx + q
    213196    $a = $t / sqrt(1 + pow($k, 2));
    214         // dès que je comprends j'ajoute 3 points pour faire une flèche ;-)
     197        // des que je comprends j'ajoute 3 points pour faire une fleche ;-)
    215198    $points = array(
    216199        round($x1 - (1+$k)*$a), round($y1 + (1-$k)*$a),
  • _plugins_/jeux/jeux/diag_echecs_init.php

    r54479 r54576  
    6666
    6767function diag_echecs_config_supplementaire() {
    68         jeux_config_set('base_url', _DIR_PLUGIN_JEUX.'img/diag_echecs'.jeux_config('taille').'/');
    69 //      jeux_config_set('base_url', './img/diag_echecs'.jeux_config('taille').'/');
     68        jeux_config_set('base_url', find_in_path('img/diag_echecs'.jeux_config('taille').'/'));
    7069        jeux_config_set('board_size', intval(jeux_config('taille'))*8);
    71         if (function_exists("imagepng")) $type = 'png';
    72         elseif (function_exists("imagegif")) $type = 'gif';
    73         else { jeux_config_set('fonction_gd_absentes'); return; }
    74    jeux_config_set('img_suffix', '.'.$type);
    75    jeux_config_set('img_create', 'imagecreatefrom'.$type);
    76    jeux_config_set('img_header', 'Content-type: image/'.$type);
    77    jeux_config_set('img_img', 'image'.$type);
     70        if (function_exists('imagepng')) $type = 'png';
     71        elseif (function_exists('imagegif')) $type = 'gif';
     72        else { jeux_config_set('erreur', 'fonctions GD absentes !'); return; }
     73        jeux_config_set('img_suffix', '.'.$type);
     74        jeux_config_set('img_create', 'imagecreatefrom'.$type);
     75        jeux_config_set('img_header', 'Content-type: image/'.$type);
     76        jeux_config_set('img_img', 'image'.$type);
    7877}
    7978
Note: See TracChangeset for help on using the changeset viewer.