Créer une miniature limitée en surface (et pas en dimensions)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 337 fois - Téléchargée 17 fois

Contenu du snippet

Bonjour à tous,

Voilà, pour les besoins de mon site je cherchais un code permettant de créer des miniatures qui ne sont pas limitées en largeur ou hauteur maximale, mais en surface maximale (afin que les logos de tout le monde soient affichés équitablements).

Donc voilà le code, c'est pas grand chose, et c'est un modification d'un code déjà existant. Donc rien de bien glorieux, je le poste uniquement si d'autres personnes cherchent la même chose que moi

Supporte les format Gif, Jpeg et PNG

Source / Exemple :


<?php

// Crée des images miniatures
// Nécessite la librairie "php_gd2"
/*utilisation de la fonction :
$path = chemin d'accès au dossier contenant la photo
$fichierSource = nom de la photo
$surface = surface maximale autorisée pour l'image
$destination = dossier de destination de la photo, par rapport à l'emplacement de la fonction */
function CreateThumb($path, $fichierSource, $surface, $destination)
{
	//teste le format de l'image et crée l'image concerné
	$image_size=getimagesize($path.$fichierSource );
	switch ( $image_size[2] ) {
		case 1 :
			$source = ImageCreateFromGif($path.$fichierSource);
			$mime_photo='image/gif';
		break;
		case 2 :
			$source = ImageCreateFromJPEG($path.$fichierSource);
			$mime_photo='image/jpeg';
		break;
		case 3 :
			$source = ImageCreateFromPNG($path.$fichierSource);
			$mime_photo='image/png';
		break;
		default:
			return 0;
	}
	
	$largeurSource = imagesx($source);
	$hauteurSource = imagesy($source);
	
	//calcul le rapport entre largeur et longueur...
	$rapport_dim= $largeurSource / $hauteurSource;
	
	// Si la surface de l'image actuelle est trop grande par rapport à la limite
	if ( ($largeurSource * $hauteurSource) > $surface ) {
		$largeurDestination = floor( sqrt( $rapport_dim * $surface ) );
		$hauteurDestination = $largeurDestination / $rapport_dim;
	} else {
		$largeurDestination = $largeurSource;
		$hauteurDestination = $hauteurSource;
	}

	//crée l'image (taille de l'imange source + taille de l'ombre)
	$im = ImageCreateTrueColor ($largeurDestination, $hauteurDestination);

	//rempli le fond de blanc
	$blanc=ImageColorAllocate ($im, 255, 255, 255);
	ImageFill($im, 0, 0, $blanc);
	ImageColorTransparent ($im, $blanc);

	//ajoute par dessus l'image source miniaturisée
	ImageCopyResampled($im, $source, 0, 0, 0, 0, $largeurDestination, $hauteurDestination, $largeurSource, $hauteurSource);

	//crée la miniature
	switch ( $mime_photo) {
		case 'image/jpeg' :
			ImageJpeg ($im, $destination.'/'.$fichierSource);
		break;
		case 'image/gif' :
			ImageGif ($im, $destination.'/'.$fichierSource);
		break;
		case 'image/png' :
			ImagePng ($im, $destination.'/'.$fichierSource);
		break;
	}
	return 1;
}

?>

Conclusion :


En espérant que ça vous serve

MadMatt

A voir également

Ajouter un commentaire Commentaires
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
pour une image en 1024 * 1024, t'as 1 mo pixel.
chaque pixel prend au moins trois octets en ram.

je te laisse calculer les dimentions maximales de tes images.
Messages postés
59
Date d'inscription
jeudi 21 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2013

Okay, je te remercie... Désolé je ne suis qu'un modeste débutant.

J'ai passé cette valeur à 40 M, je devrais être tranquille, non???
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
j'ai parle de limite de memoire, pas d'upload.... relis ton php.ini
Messages postés
59
Date d'inscription
jeudi 21 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2013

Je te remercie

mon : upload_max_filesize 2M 2M , ceci doit être insuffisant, pourtant mes images pèsent 1.8Mo
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
dans php.ini, t'as une limite de memoire ram.

si php tente d'allouer plus de ram, il se stope. c'est probablement le probleme que tu as rencontre.
Afficher les 14 commentaires

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.