begin process at 2008 07 21 00:33:04
1 213 530 membres
431 nouveaux aujourd'hui
14 167 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CRÉER UNE MINIATURE LIMITÉE EN SURFACE (ET PAS EN DIMENSIONS)


Information sur la source

Catégorie :Graphique Classé sous : miniature, surface, miniatures, thumbnail, image Niveau : Débutant Date de création : 18/08/2007 Date de mise à jour : 19/08/2007 21:12:58 Vu : 3 138

Note :
Aucune note

Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note


Description

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

  • <?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;
  • }
  • ?>
<?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
19 août 2007 21:12:58 :
Ajout des balises PHP
  • signaler à un administrateur
    Commentaire de TheSin le 19/08/2007 12:56:21

    Tu ne teste jamais l'existence d'un fichier ou faut s'en assurer avant ?

  • signaler à un administrateur
    Commentaire de MadM@tt le 19/08/2007 14:48:42

    Ah oui dans mon script c'est testé avant (hors de cette fonction quoi). La c'est vraiment le bout de code qui permet de créer la miniature.

  • signaler à un administrateur
    Commentaire de TheSin le 19/08/2007 19:17:05

    ok
    t'as moyen de modifier l'allure du code en rajoutant les tags <?php ?> stp ?
    c'est plus lisible avec les couleurs '^^
    (j'ai l'impression d'être sous notepad là :( )

  • signaler à un administrateur
    Commentaire de MadM@tt le 19/08/2007 21:13:35

    Ah effectivement pas bête, j'ai rajouté c'est mieux ^^

  • signaler à un administrateur
    Commentaire de TheSin le 19/08/2007 21:41:16

    merci, maintenant ça donne envie de lire ton source ;-)

  • signaler à un administrateur
    Commentaire de coucou747 le 20/08/2007 06:07:29

    salut,
    a la place de tes return 0 et 1, tu peux mettre false et true, ca sera plus propre...

    $rapport_dim= $largeurSource / $hauteurSource;

    sinon, il faudrait verifier les retours de ImageCreateFromXXX et imagesy au minimum...

    ce qui serait interessant, c'est de gerer des contraintes, genre maxX, maxY, minX, minY, Rapport, default, exces, garder_surface... pour proposer plusieurs modes de redimentionnement, et faire en sorte que si un gars poste une image de 1 px de haut, il ne deforme pas ton site

  • signaler à un administrateur
    Commentaire de cacoun le 08/07/2008 11:32:45

    Les images originales, ont-elles une taille max ? car kan j'utilise des images de plus de 1.5Mo, j'ai l'impression qu'il refuse mes fichiers....

  • signaler à un administrateur
    Commentaire de coucou747 le 08/07/2008 13:01:41

    cacoun, ca depasse la limite de ram...

  • signaler à un administrateur
    Commentaire de cacoun le 08/07/2008 14:34:06

    Merci COUCOU747... mais ca veut dire koi???

  • signaler à un administrateur
    Commentaire de coucou747 le 08/07/2008 14:44:18

    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.

  • signaler à un administrateur
    Commentaire de cacoun le 08/07/2008 14:56:29

    Je te remercie

    mon : upload_max_filesize 2M 2M , ceci doit être insuffisant, pourtant mes images pèsent 1.8Mo

  • signaler à un administrateur
    Commentaire de coucou747 le 08/07/2008 15:21:21

    j'ai parle de limite de memoire, pas d'upload.... relis ton php.ini

  • signaler à un administrateur
    Commentaire de cacoun le 08/07/2008 15:26:21

    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???

  • signaler à un administrateur
    Commentaire de coucou747 le 08/07/2008 15:35:18

    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.

Ajouter un commentaire

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS