Miniature non écrasé, avec choix de la position du recadrage

Contenu du snippet

http://intranet/travail/test/cutImg.php?img=./img.jpg&h=300&l=50&align=11
Renvois l'image réduite :
Les dimensions ne sont pas changé sauf si l'image est plus petite ;o).
L'image est réduite puis recadré si un dimension est trop grande.
"align" permet de définir la position du recadrage :
align=largeur.hauteur; 1:gauche ou haut 2:centrer 3:droite ou bas

exemple de centrage en hauteur et en largeur :
http://intranet/travail/test/cutImg.php?img=./img.jpg&h=300&l=50&align=22

En haut à droite :
http://intranet/travail/test/cutImg.php?img=./img.jpg&h=300&l=50&align=13

Source / Exemple :


<?php
 // http://intranet/travail/test/cutImg.php?align=11&img=./img.jpg&h=300&l=50
 // align=largeur.hauteur;  1:gauche ou haut  2:centrer  3:droite ou bas

   $largeur=100;
   $hauteur=100;
   $image='./img.jpg';
   $align=22;
	if(isset($_GET['img']))
	{
        $imaget=$_GET['img'];
		if(is_file($imaget) && ereg(".jp[e]?g$", $imaget) && !ereg("[\.]{2}/\\", $imaget) && !ereg("://", $imaget))
		{
			$image=$imaget;
	    }
    }
	if(isset($_GET['align']) && ereg("^[1-3]{2}$", $_GET['align']))
	{
			$align=$_GET['align'];
    }

	if(isset($_GET['h']) && ereg("^[0-9]{2,}$", $_GET['h']))
	{
			$hauteur=$_GET['h'];
    }
	if(isset($_GET['l']) && ereg("^[0-9]{2,}$", $_GET['l']))
	{
			$largeur=$_GET['l'];
    }

        $img_in = imagecreatefromjpeg($image);

        $size = getimagesize($image);
        $l = $size[0];
        $h = $size[1];

        if ($l >= $largeur && $h>= $hauteur) {

            $new_haut = ($h * $largeur) / $l;
            if($new_haut < $hauteur) {

                $new_haut = $hauteur;
                $new_larg = ($l * $hauteur) / $h;

            } else {

                $new_larg = $largeur;

            }

            // on réduit l'image à la largeur voulue, mais en gardant la hauteur proportionnelle
            $img_out = imagecreate($new_larg, $new_haut);
            imagecopyresized($img_out, $img_in, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), $l, $h);

            // création d'une image vide aux dimensions de la miniature
            $im = imagecreate($largeur, $hauteur);

            switch($align[0])
            {
            	case 1:
    	        $src_x=0;
                break;
            	case 2:
    	        $src_x=($new_larg-$largeur)/2;
                break;
               	case 3:
    	        $src_x=($new_larg-$largeur);
                break;
            }

            switch($align[1])
            {
            	case 1:
	            $src_y=0;
                break;
            	case 2:
	            $src_y=($new_haut-$hauteur)/2;
                break;
               	case 3:
	            $src_y=($new_haut-$hauteur);
                break;
            }

            // on copie la zone de l'image de hauteur voulue dans l'image vide
            @imagecopy($im, $img_out, 0, 0, $src_x, $src_y, $largeur, $hauteur) or
            imagecopy($im, $img_out, 0, 0, 0, 0, $largeur, $hauteur);

            imagejpeg($im);

            // destruction des images en mémoire
            imagedestroy($img_out);
            imagedestroy($im);

        } elseif ($l < $largeur && $h >= $hauteur) {

            $img_out = imagecreate($l, $h);
            imagecopyresized($img_out, $img_in, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), $l, $h);

            $im = imagecreate($l, $hauteur);

            switch($align[1])
            {
            	case 1:
	            $src_y=0;
                break;
            	case 2:
	            $src_y=($h-$hauteur)/2;
                break;
               	case 3:
	            $src_y=($h-$hauteur);
                break;
            }

            @imagecopy($im, $img_out, 0, 0, 0, $src_y, $l, $hauteur) or
          		imagecopy($im, $img_out, 0, 0, 0, 0, $l, $hauteur);
            imagejpeg($im);

            // destruction des images en mémoire
            imagedestroy($img_out);
            imagedestroy($im);

        } elseif ($l >= $largeur && $h < $hauteur) {

            $img_out = imagecreate($l, $h);
            imagecopyresized($img_out, $img_in, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), $l, $h);

            $im = imagecreate($largeur , $h);

            switch($align[0])
            {
            	case 1:
    	        $src_x=0;
                break;
            	case 2:
    	        $src_x=($l-$largeur)/2;
                break;
               	case 3:
    	        $src_x=($l-$largeur);
                break;
            }

            @imagecopy($im, $img_out, 0, 0, $src_x, 0, $largeur, $h) or
				imagecopy($im, $img_out, 0, 0, 0, 0, $largeur, $h);
            imagejpeg($im);

            // destruction des images en mémoire
            imagedestroy($img_out);
            imagedestroy($im);

        } elseif ($l < $largeur && $h< $hauteur) {

            imagejpeg($img_in);

        }

        // destruction de l'image en mémoire
        imagedestroy($img_in);
?>

Conclusion :


A essayer...

A voir également