Fonction générique de redimensionnement d'image

Description

Ce code est très simple : on lui passe une image GIF, JPG ou PNG (dans le même répertoire, je n'ai pas voulu faire complexe), une largeur, une hauteur, et il crée l'image redimensionnée préfixé par 'thumb_'.

La nouveauté, un code relativement court grâce à create_function () pour créer dynamiquement la bonne fonction selon le type de l'image.

A modifier selon vos désirs (je le répête, je suis allé au plus simple).

USAGE :
imageResize (string fileName, array KEEP_PROPORTIONS)
string filename => nom du fichier image à redimensionner
optionnel array KEEP_PROPORTION => Tableau de 2 ou 3 entrées, avec pour la 1ère, une des chaînes suivantes :
'DO_NOT_KEEP_PROPORTIONS', 'KEEP_PROPORTIONS_ON_WIDTH', 'KEEP_PROPORTIONS_ON_HEIGHT', 'KEEP_PROPORTIONS_ON_BIGGEST', 'KEEP_PROPORTIONS_ON_SMALLEST'
et pour la 2de, un entier VAL. Cet entier déterminera la taille en pixel sur laquelle la fonction se calera.
Si on a choisi DO_NOT_KEEP_PROPORTIONS, une 3ème valeur est nécessaire. Dans ce cas, la 2de valeur représentera la nouvelle largeur, et la 3ème la nouvelle hauteur.
'DO_NOT_KEEP_PROPORTIONS' => largeur = VAL1, hauteur = VAL2.
'KEEP_PROPORTIONS_ON_WIDTH' => largeur = VAL, et hauteur déterminée en fonction.
'KEEP_PROPORTIONS_ON_HEIGHT' => hauteur = VAL, et largeur déterminée en fonction.
'KEEP_PROPORTIONS_ON_BIGGEST' => plus grande valeur entre hauteur et largeur = VAL? l'autre est déterminée en fonction.
'KEEP_PROPORTIONS_ON_SMALLEST' => plus petite valeur entre hauteur et largeur = VAL? l'autre est déterminée en fonction.
Dans mon exemple, je définis à 25 pixels le plus grand côté. Pour une image faisant à l'origine 640*480, la largeur sera fixée à 25, et la hauteur déduite pour conserver les proprotions.

Source / Exemple :


<?php
function imageResize ($sFileNameFrom, $sFileNameTo, $KEEP_PROPORTIONS) {
	$aProportions = array ('DO_NOT_KEEP_PROPORTIONS', 'KEEP_PROPORTIONS_ON_WIDTH', 'KEEP_PROPORTIONS_ON_HEIGHT', 'KEEP_PROPORTIONS_ON_BIGGEST', 'KEEP_PROPORTIONS_ON_SMALLEST');
	if (!file_exists ($sFileNameFrom) || !is_array ($KEEP_PROPORTIONS) || empty ($KEEP_PROPORTIONS)) {
		return false;
	} else {
		$aImg = @getimagesize ($sFileNameFrom);
		if (false === $aImg) {
			return false;
		} else {
			$aTypes = array (1 => 'gif', 2 => 'jpeg', 3 => 'png');
			if (!in_array ($aImg[2], array_keys ($aTypes))) {
				return false;
			} else {
				if (!in_array ($KEEP_PROPORTIONS[0], $aProportions)) {
					return false;
				}
				$iCmpt = count ($KEEP_PROPORTIONS);
				if (!empty ($KEEP_PROPORTIONS) && is_array ($KEEP_PROPORTIONS) && ($iCmpt >= 2) && is_int ($KEEP_PROPORTIONS[1])) {
					switch ($KEEP_PROPORTIONS[0]) {
						case 'KEEP_PROPORTIONS_ON_WIDTH' :
							$width = $KEEP_PROPORTIONS[1];
							$height = round ($aImg[1] / (round ($aImg[0]/$KEEP_PROPORTIONS[1])));
							break;
						case 'KEEP_PROPORTIONS_ON_HEIGHT' :
							$height = $KEEP_PROPORTIONS[1];
							$width = round ($aImg[0]/ (round ($aImg[1]/$KEEP_PROPORTIONS[1])));
							break;
						case 'KEEP_PROPORTIONS_ON_BIGGEST' :
							if ($aImg[0] >= $aImg[1]) {
								$width = $KEEP_PROPORTIONS[1];
								$height = round ($aImg[1] / (round ($aImg[0]/$KEEP_PROPORTIONS[1])));
							} else {
								$height = $KEEP_PROPORTIONS[1];
								$width = round ($aImg[0] / (round ($aImg[1]/$KEEP_PROPORTIONS[1])));
							}
							break;
						case 'KEEP_PROPORTIONS_ON_SMALLEST' :
							if ($aImg[0] <= $aImg[1]) {
								$width = $KEEP_PROPORTIONS[1];
								$height = round ($aImg[1] / (round ($aImg[0]/$KEEP_PROPORTIONS[1])));
							} else {
								$height = $KEEP_PROPORTIONS[1];
								$width = round ($aImg[0] / (round ($aImg[1]/$KEEP_PROPORTIONS[1])));
							}
							break;
						case 'DO_NOT_KEEP_PROPORTIONS':
							if ($iCmpt !== 3 || !is_int ($KEEP_PROPORTIONS[2])) {
								return false;
							}
							$width = $KEEP_PROPORTIONS[1];
							$height = $KEEP_PROPORTIONS[2];
							break;
					}
				}
				$getImg = create_function ('$sFileNameFrom', 'return @imagecreatefrom'.$aTypes[$aImg[2]].'($sFileNameFrom);');
				$saveImg = create_function ('$img, $sFileNameTo', 'return @image'.$aTypes[$aImg[2]].'($img, $sFileNameTo);');
				$im = $getImg ($sFileNameFrom);
				$image_p = imagecreatetruecolor($width, $height);
				imagecolortransparent ($image_p, 0);
				imagecopyresampled($image_p, $im, 0, 0, 0, 0, $width, $height, $aImg[0], $aImg[1]);
				if ($saveImg ($image_p, $sFileNameTo)) {
					return true;
				} else {
					return false;
				}
			}
		}
	}
}
imageResize ('transparent.gif', 'thumb_transparent.gif', array ('DO_NOT_KEEP_PROPORTIONS', 100, 100));
?>

Codes Sources

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.