Changeset 88685 in spip-zone


Ignore:
Timestamp:
Apr 20, 2015, 9:41:44 AM (4 years ago)
Author:
arno@…
Message:

Version 5.2: nouvel argument: $zoom pour image_proportions($img, $l, $h, $mode, $zoom). Si $zoom > 2 (par exemple 1.5), le recadrage se fera en zoomant à l’intérieur de l’image. Si on le fait en alignement « focus », ça devient intéressant, puisqu’on recarde en zoomant sur le centre d’intérêt de l’image.

Location:
_plugins_/image_responsive
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/image_responsive/image_responsive_fonctions.php

    r88684 r88685  
    290290
    291291
    292 function image_proportions($img, $largeur=16, $hauteur=9, $align="center") {
     292function image_proportions($img, $largeur=16, $hauteur=9, $align="center", $zoom=1) {
     293        $mode = $align;
    293294       
    294295       
    295296        if (!$img OR $hauteur == 0 OR $largeur == 0) return;
     297       
    296298       
    297299        $l_img = largeur ($img);
     
    302304        $r_img = $h_img / $l_img;       
    303305        $r = $hauteur / $largeur;       
     306       
     307        if ($r_img < $r) {
     308                $l_dest = $h_img/$r;
     309                $h_dest = $h_img;
     310        } else if ($r_img > $r) {
     311                $l_dest = $l_img;
     312                $h_dest = $l_img*$r;
     313        }
     314       
    304315       
    305316        // Si align est "focus", on va aller chercher le «point d'intérêt» de l'image
    306317        // avec la fonction centre_image du plugin «centre_image»
    307318        if ($align == "focus" && function_exists(centre_image)) {
     319                $dx = centre_image_x($img);
     320                $dy = centre_image_y($img);
     321
    308322                if ($r_img > $r) {
    309                         $dy = centre_image_y($img);
    310                         $h_dest = $l_img * $r;
     323                        $h_dest = round(($l_img * $r)/$zoom);
     324                        $l_dest = round($l_img/$zoom);
     325                } else {
     326                        $h_dest = round($h_img/$zoom);
     327                        $l_dest = round(($h_img / $r)/$zoom);
     328                }
    311329                        $h_centre = $h_img * $dy;
     330                        $l_centre = $l_img * $dx;
    312331                        $top = round($h_centre - ($h_dest/2));
     332                        $l_centre = $l_img * $dx;
     333                        $left = round($l_centre - ($l_dest/2));
    313334                       
    314335                        if ($top < 0) $top = 0;
    315336                        if ($top + $h_dest > $h_img ) $top = $h_img - $h_dest;
    316                        
    317                         //echo "Vertical $dy - $l_img x $h_img - $h_dest - $h_centre $top";
    318                         $align = "top=$top";
    319                        
    320                        
    321                 } else {
    322                         $dx = centre_image_x($img);
    323                         $l_dest = $h_img / $r;
    324                         $l_centre = $l_img * $dx;
    325                         $left = round($l_centre - ($l_dest/2));
    326                        
    327337                        if ($left < 0) $left = 0;
    328338                        if ($left + $l_dest > $l_img ) $left = $l_img - $l_dest;
    329 
    330                         //echo "Large $dx - $l_img x $h_img - $l_dest - $l_centre $left";
    331                         $align = "left=$left";
    332                 }
    333         }
    334        
    335         if ($r_img < $r) {
    336                 include_spip("filtres/images_transforme");
    337                 $img = image_recadre($img, $h_img/$r, $h_img, $align);
    338         } else if ($r_img > $r) {
    339                 include_spip("filtres/images_transforme");
    340                 $img = image_recadre($img, $l_img, $l_img*$r, $align);
     339                       
     340                        //echo "$dy - $l_img x $h_img - $h_dest x $l_dest - $h_centre x $l_centre - $top x $left";
     341                        $align = "top=$top, left=$left";
     342        }
     343
     344        include_spip("filtres/images_transforme");
     345        $img = image_recadre($img, $l_dest, $h_dest, $align);
     346       
     347        // Second passage si $zoom (on verra plus tard si c'est intéressant de le traiter en amont)
     348        if ($zoom > 1 && $mode != "focus") {
     349                $l_img = largeur ($img)/2;
     350                $h_img = hauteur($img)/2;
     351               
     352                $img = image_recadre($img, $l_img, $h_img);
     353               
    341354        }
    342355       
  • _plugins_/image_responsive/paquet.xml

    r88684 r88685  
    22        prefix="image_responsive"
    33        categorie="outil"
    4         version="5.1.0"
     4        version="5.2.0"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.1.*]"
Note: See TracChangeset for help on using the changeset viewer.