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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 630 fois - Téléchargée 32 fois

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

Ajouter un commentaire

Commentaires

Messages postés
8
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
20 août 2011

Tout ça c'est mignon mais, maintenant que la fonction ereg est une fonction dépréciée, que faire ? Peut tu editer ton code ?

Merci
Messages postés
321
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2013

par contre j'ai remplacé imagecreate par imagecreatetruecolor c'est quand meme plus joli !
Messages postés
321
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2013

c'est geniale ton truc !

Dis-moi comment tu peux faire pour enregistrer l'image créé dans un repertoire ?

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.