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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.