[SPIP] ~v3.0.17-->v3.0.19
[ptitvelo/web/www.git] / www / plugins-dist / filtres_images / filtres / images_transforme.php
index 0722117..d3233a7 100644 (file)
@@ -28,9 +28,9 @@ include_spip('inc/filtres_images_mini');
 // pour le format gif, $qualite correspond au nombre de couleurs dans la palette (defaut 128)
 // pour le format png, $qualite correspond au nombre de couleur dans la palette ou si 0 a une image truecolor (defaut truecolor)
 // attention, seul 128 est supporte en l'etat (production d'images avec palette reduite pas satisfaisante)
-// http://doc.spip.org/@image_aplatir
+// http://code.spip.net/@image_aplatir
 // 3/ $transparence a "true" permet de conserver la transparence (utile pour conversion GIF)
-// http://doc.spip.org/@image_aplatir
+// http://code.spip.net/@image_aplatir
 function image_aplatir($im, $format='jpg', $coul='000000', $qualite=NULL, $transparence=false)
 {
        if ($qualite===NULL){
@@ -159,7 +159,7 @@ function image_aplatir($im, $format='jpg', $coul='000000', $qualite=NULL, $trans
 // Enregistrer une image dans un format donne
 // (conserve la transparence gif, png, ico)
 // utilise [->@image_aplatir]
-// http://doc.spip.org/@image_format
+// http://code.spip.net/@image_format
 function image_format($img, $format='png') {
        $qualite = null;
        if ($format=='png8') {$format='png';$qualite=128;}
@@ -170,7 +170,7 @@ function image_format($img, $format='png') {
 // Transforme l'image en PNG transparent
 // alpha = 0: aucune transparence
 // alpha = 127: completement transparent
-// http://doc.spip.org/@image_alpha
+// http://code.spip.net/@image_alpha
 function image_alpha($im, $alpha = 63)
 {
        $fonction = array('image_alpha', func_get_args());
@@ -231,7 +231,24 @@ function image_alpha($im, $alpha = 63)
        
 }
 
-// http://doc.spip.org/@image_recadre
+/**
+ *
+ * http://code.spip.net/@image_recadre
+ *
+ * @param string $im
+ * @param string|int $width
+ *   largeur du recadrage
+ *   ou ratio sous la forme "16:9"
+ * @param string|int $height
+ *   hauteur du recadrage
+ *   ou "+" (agrandir) ou "-" (reduire) si un ratio est fourni pour width
+ * @param string $position
+ *   center, left, right, top, bottom, ou combinaisons ("top left")
+ * @param string $background_color
+ *   couleur de fond si on agrandit l'image
+ * @return string
+ *   balise image recadree
+ */
 function image_recadre($im,$width,$height,$position='center', $background_color='white')
 {
        $fonction = array('image_recadre', func_get_args());
@@ -248,6 +265,23 @@ function image_recadre($im,$width,$height,$position='center', $background_color=
                return _image_tag_changer_taille($im,$width,$height);
        }
 
+       // on recadre pour respecter un ratio ?
+       // width : "16:9"
+       // height : "+" pour agrandir l'image et "-" pour la croper
+       if (strpos($width,":")!==false){
+               list($wr,$hr) = explode(":",$width);
+               $hm = $x_i / $wr * $hr;
+               $ym = $y_i / $hr * $wr;
+               if ($height=="+"?($y_i<$hm):($y_i>$hm)){
+                       $width = $x_i;
+                       $height = $hm;
+               }
+               else {
+                       $width = $ym;
+                       $height = $y_i;
+               }
+       }
+
        if ($width==0) $width=$x_i;
        if ($height==0) $height=$y_i;
        
@@ -415,7 +449,7 @@ function image_recadre_mini($im)
 }
 
 
-// http://doc.spip.org/@image_flip_vertical
+// http://code.spip.net/@image_flip_vertical
 function image_flip_vertical($im)
 {
        $fonction = array('image_flip_vertical', func_get_args());
@@ -454,7 +488,7 @@ function image_flip_vertical($im)
        return _image_ecrire_tag($image,array('src'=>$dest));
 }
 
-// http://doc.spip.org/@image_flip_horizontal
+// http://code.spip.net/@image_flip_horizontal
 function image_flip_horizontal($im)
 {
        $fonction = array('image_flip_horizontal', func_get_args());
@@ -492,7 +526,7 @@ function image_flip_horizontal($im)
        return _image_ecrire_tag($image,array('src'=>$dest));
 }
 
-// http://doc.spip.org/@image_masque
+// http://code.spip.net/@image_masque
 function image_masque($im, $masque, $pos="") {
        // Passer, en plus de l'image d'origine,
        // une image de "masque": un fichier PNG24 transparent.
@@ -904,7 +938,7 @@ function image_masque($im, $masque, $pos="") {
 // un noir & blanc "photo" n'est pas "neutre": les composantes de couleur sont
 // ponderees pour obtenir le niveau de gris;
 // on peut ici regler cette ponderation en "pour mille"
-// http://doc.spip.org/@image_nb
+// http://code.spip.net/@image_nb
 function image_nb($im, $val_r = 299, $val_g = 587, $val_b = 114)
 {
        $fonction = array('image_nb', func_get_args());
@@ -960,7 +994,7 @@ function image_nb($im, $val_r = 299, $val_g = 587, $val_b = 114)
        return _image_ecrire_tag($image,array('src'=>$dest));
 }
 
-// http://doc.spip.org/@image_flou
+// http://code.spip.net/@image_flou
 function image_flou($im,$niveau=3)
 {
        // Il s'agit d'une modification du script blur qu'on trouve un peu partout:
@@ -1088,7 +1122,7 @@ function image_flou($im,$niveau=3)
        return _image_ecrire_tag($image,array('src'=>$dest,'width'=>($x_i+$niveau),'height'=>($y_i+$niveau)));
 }
 
-// http://doc.spip.org/@image_RotateBicubic
+// http://code.spip.net/@image_RotateBicubic
 function image_RotateBicubic($src_img, $angle, $bicubic=0) {
        include_spip('filtres/images_lib');
    
@@ -1267,7 +1301,7 @@ function image_RotateBicubic($src_img, $angle, $bicubic=0) {
 
 // permet de faire tourner une image d'un angle quelconque
 // la fonction "crop" n'est pas implementee...
-// http://doc.spip.org/@image_rotation
+// http://code.spip.net/@image_rotation
 function image_rotation($im, $angle, $crop=false)
 {
        $fonction = array('image_rotation', func_get_args());
@@ -1282,7 +1316,7 @@ function image_rotation($im, $angle, $crop=false)
        if ($creer) {
                $effectuer_gd = true;
 
-               if(is_callable(array('Imagick','rotateImage'))){
+               if(method_exists('Imagick','rotateImage')){
                        $imagick = new Imagick();
                        $imagick->readImage($im);
                        $imagick->rotateImage(new ImagickPixel('none'), $angle);
@@ -1338,7 +1372,7 @@ function image_rotation($im, $angle, $crop=false)
 // Permet d'appliquer un filtre php_imagick a une image
 // par exemple: [(#LOGO_ARTICLE|image_imagick{imagick_wave,20,60})]
 // liste des fonctions: http://www.linux-nantes.org/~fmonnier/doc/imagick/
-// http://doc.spip.org/@image_imagick
+// http://code.spip.net/@image_imagick
 function image_imagick () {
        $tous = func_get_args();
        $img = $tous[0];
@@ -1378,7 +1412,7 @@ function image_imagick () {
 // Permet de rendre une image
 // plus claire (gamma > 0)
 // ou plus foncee (gamma < 0)
-// http://doc.spip.org/@image_gamma
+// http://code.spip.net/@image_gamma
 function image_gamma($im, $gamma = 0){
        include_spip('filtres/images_lib');
        $fonction = array('image_gamma', func_get_args());
@@ -1430,7 +1464,7 @@ function image_gamma($im, $gamma = 0){
 // On peut fixer les valeurs RGB 
 // de la couleur "complementaire" pour forcer une dominante
 //function image_sepia($im, $dr = 137, $dv = 111, $db = 94)
-// http://doc.spip.org/@image_sepia
+// http://code.spip.net/@image_sepia
 function image_sepia($im, $rgb = "896f5e"){
        include_spip('filtres/images_lib');
        
@@ -1496,7 +1530,7 @@ function image_sepia($im, $rgb = "896f5e"){
 
 
 // Renforcer la nettete d'une image
-// http://doc.spip.org/@image_renforcement
+// http://code.spip.net/@image_renforcement
 function image_renforcement($im, $k=0.5)
 {
        $fonction = array('image_flou', func_get_args());