Sign in to follow this  
Followers 0

miniaturisation d'image sans déformation...

31 posts in this topic

Posted · Report post

Bonjour,

je viens de tomber sur une fonction de miniaturisation d'image...

elle me parait bien pratique !!

comment l'adaptée pour peel ?

voici le code de la fonction :

function mini ($xmax,$ymax,$dossier,$img,$name,$fond_couleur) {

	/*

	$xmax => largeur maximale de l'image

	$ymax => hauteur maximale de l'image

	=> soit une taille en px soit 'none' pour dire qu'on veut garder la même

	$dossier => dossier dans lequel doit  être créé la miniature : format dossier/ (ne pas oublier le / )

	$img => l'image à miniaturiser

	$name => le nom de l'image

	$fond_couleur => couleur de fond de l'image au format hexadecimal RRR-VVV-BBB

	*/	

	// Types d'images utilisés pour le 'switch' un peu plus loin

	define('FORMAT_GIF',1);

	define('FORMAT_JPEG',2);

	define('FORMAT_PNG',3);


	// dimensions critiques

	define('YMIN',0);

	define('YMAX',1000);

	define('XMIN',0);

	define('XMAX',1000);


	// dimensions par défaut

	define('DEFAUTX',150);

	define('DEFAUTY',150);


	// on essaie d'ouvrir le fichier uniquement en lecture (pour être sur qu'il existe) :

	if(@$file=fopen($img,'r')) {

		// si le fichier a bien été ouvert, on verifie que c'est bien une image

		// getimagesize renvoie plusieurs infos de l'image (dimensions, type etc...) et FALSE

		// si le fichier n'est pas une image :

		if(list($largeur,$hauteur,$extention) = @getimagesize(htmlentities($img))) {

			// si c'est bien une image, on teste les valeurs voulues pour la miniature

			// largeur

			if((isset($xmax) && !empty($xmax) && $xmax>XMIN && $xmax<XMAX)) {

				$xm=$xmax;

			} elseif($xmax=='none') {

			// si la largeur n'est pas definie on garde la même

				$xm=$largeur;

			} else {

				$xm=DEFAUTX; // largeur par defaut (au cas ou)

			}

			// hauteur

			if((isset($ymax) && !empty($ymax) && $ymax>YMIN && $ymax<YMAX)) {

				$ym=$ymax;

			} elseif($ymax=='none') {

			// si la hauteur n'est pas definie on garde la même

				$ym=$hauteur;

			} else {

				$ym=DEFAUTY; // largeur par defaut (au cas ou)

			}

			// creation de la miniature :

			// test de l'extention :

			if(in_array($extention,array(1,2,3))) {

				// si l'extention est bonne on continue

				switch($extention) {

					case FORMAT_GIF: // GIF

						$im=imagecreatefromgif($img) or die('probleme de librairie');

					break;

					case FORMAT_JPEG: //JPEG

						$im=imagecreatefromjpeg($img) or die('probleme de librairie');

					break;

					case FORMAT_PNG: // PNG

						$im=imagecreatefrompng($img) or die('probleme de librairie');

					break;

				}

				// test des dimensions :

				// si l'image est trop large ou trop haute

				if($largeur>$xm || $hauteur>$ym) {

					// coeficient de proportionnalité (pour garder les proportions dans la reduction de l'image)

					// la reduction ne se fait que pour des dimensions finales entieres donc on arrondis le resultat

					if ($largeur && ($largeur > $hauteur)) {

						// image plus large que haute

						$nhauteur = ceil(($hauteur * $xm)/$largeur);

						$nlargeur=$xm;

					} else {

						// image plus haute que large

						$nlargeur = ceil(($largeur *$ym)/$hauteur);

						$nhauteur=$ym;

					}

				} elseif($largeur<$xm || $hauteur<$ym) {

					if($largeur<=$xm) {

						$nlargeur=$largeur;

						$xm=$largeur;

					}

					if($hauteur<=$ym) {

						$nhauteur=$hauteur;

						$ym=$hauteur;

					}

				} else {

					$nlargeur=$largeur;

					$nhauteur=$hauteur;

				}

				// calcul de la position de l'image sur la miniature (centrée si l'image finale est plus grande) 

				$py=($ym-$nhauteur)/2;

				$px=($xm-$nlargeur)/2;


				// miniaturisation


				// image sur fond de couleur definie par l'utilisateur :

				if(isset($fond_couleur) && !empty($fond_couleur)) {

					$src=imagecreatetruecolor($xm,$ym) or die('probleme de librairie');


					list($fond_rouge,$fond_vert,$fond_bleu) = explode('-',$fond_couleur);

					$fond=imagecolorallocate($src,$fond_rouge,$fond_vert,$fond_bleu) or die('probleme de librairie');


					// on dessine un rectangle de la couleur choisit par l'utilisateur (couleur de fond)

					imagefilledrectangle($src,0,0,$xm,$ym,$fond) or die('probleme de librairie');


					// on créé la miniature

					imagecopyresampled($src,$im,$px,$py,0,0,$nlargeur,$nhauteur,$largeur,$hauteur) or die('probleme de librairie');

				} else {

					// Aucune couleur de fond definie!

					return false;

				}

			} else {

				//L'image doit être au format GIF, JPEG ou PNG !

				return false;

			}

		} else {

			// Le fichier n'est pas une image !

			return false;

		}

	} else {

		return false;

	}

	// dans le cas ou vous voudriez sauvegarder puis afficher, ne pas inverser cet ordre !

	// sauvegarde de l'image :

	imagepng($src,$dosier.$name.'.png');


	// affichage de l'image

	header('content-type: image/png');

	return @imagepng($src);

}

Merci d'une aide !

à bientôt...

Share this post


: post
Share on other sites

Posted · Report post

pour ne pas avoir de deformation il suffit tres souvent de ne donner que la largeur de l'image ...

il ne faut pas oublier que le traitement d'image ou la generation d'image via php prends du temps ...

mozilla firefox est super pour voir le poids des pages et leur structure il suffit de mettre un des plugin ( webdevelopeur un truc comme ça )

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

le pb c'est que j'ai des images lourdes

pour une meilleurs appréciation des produits !

on constate en page d'accueil le temps de charge de cette page ( lourd )

car les images ont une taille défini au lieux d'avoir des miniatures !

donc ton aide macao45 est la bienvenue !

à bientôt...

Share this post


: post
Share on other sites

Posted · Report post

alors dans ce cas .... BIDOUILLE !!!

dans izzotek par exemple j'ai refait completement la gestion des images pour avoir une miniature et une grande image

( bon evidement il faut se taper toutes les iamges à reduire .... mais la qualitée à un prix!!)

ensuite je ne download pas les images via peel , je met les images via FTP sur le repertoire image et je stock dans le champ image que le nom de l'image ...mais pas completement ...

c'est a dire que mes images s'appel toto_A.jpg pour la petite et toto_B.jpg pour la grande

de ce fais je ne garde que toto dans le nom(s) de l'image(s) et dans la page d'acceuil et le detail je prend _A.jpg et quand tu clique sur 'limage je prends _B.jpg

ça vau ce que ça vau ...mais c'est efficace :)

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

justement willy m'a envoyé un script qui marche mais il déforme les images :

voilà le lien du topic : http://forum.peel.fr/index.php?showtopic=989&st=0

mais je pense qu'il est possible de s'inspirer de son topic pour finaliser le mien !!

grosso merdo j'ai compris ce que tu a fait !!

tu télécharge deux images à chaque fois !!

une mini et l'autres grande !

toutes tes photos son mini sauf pour le détail produit et là quand tu agrandi elle passe sur l'image grande !!

j'y ai pensé !! mais voilà le temps perdu !!

quand tu a 10 produits ça va mais quand tu en a 5000 ça change la donne !

donc tu tu peux m'aides à faire cette fonction je t'en remerci par avance !!

je tente de mon coté et je donne ce que je trouve !

à bientôt...

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

sa fonction est de récupérer les images d'un répertoire pour les miniaturiser

automatiquement est les envoyer dans un autre répertoire !!

c'est ce que je recherche !!

c'est là que j'ai besoin d'aide pour le mettre en place pour peel !!

voilà le code :

<?php


/*

$img_src // Chemin vers l'image cible


*/


function createThumbWithOver($img_src='./images/dell_d600.jpg',$w_thumb=195,$h_thumb=0,$border=2,$radial=10,$alpha=50){


	$pic['destOver']['name'] = md5($img_src.$w_thumb.$h_thumb.$border.$radial.$alpha.'over'); // nom du fichier over

	$pic['destNormal']['name'] = md5($img_src.$w_thumb.$h_thumb.$border.$radial.$alpha); // nom du fichier normal


	$makePic = false; // variable pour vérifcation is on cré les images ou non

	// Routine pour vérifier si le fichier cache existe et si il est plus vieux que l'image d'origine

	if(file_exists('./mini/'.$pic['destNormal']['name'].'.gif') === true ){ // si le fihcier existe ?

		if(intval(filemtime($img_src)) > intval(filemtime('./mini/'.$pic['destNormal']['name'].'.gif'))){ // si le fichier cache est plsu vieux que le fichier source

			$makePic = true; // fichier source est plus récent donc il faut recréer les images

		}else{

			$makePic = false; // le fichier sourve est plsu vieux que le fichier cache donc on ne le recré pas

		}

	}else{

		$makePic = true; // si le fihcier cache n'existe pas il faut le créer

	}


	// Vérification de la variable , piour savoIr si on cré les images

	if($makePic === true){

		// Récupération des infos de l'image source

		list($pic['src']['info']['width'], $pic['src']['info']['height'], $pic['src']['info']['type'], $pic['src']['info']['attr']) = getimagesize($img_src);


		//On vérifie si le parametre de la hauteur est plsu grand que 0

		if($h_thumb == 0){ // si egal a zaro on affecte la hauteur proportionnellement 

			$h_thumb = floor($pic['src']['info']['height'] * $w_thumb / $pic['src']['info']['width']);

		}

		switch($pic['src']['info']['type']){

			case"1": $pic['src']['ress'] = imagecreatefromgif($img_src); break; // Création de l'image pour une source gif

			case"2": $pic['src']['ress'] = imagecreatefromjpeg($img_src); break; // Création de l'image pour une source jpg

			case"3": $pic['src']['ress'] = imagecreatefrompng($img_src); break; // Création de l'image pour une source png

		}


		$pic['destNormal']['ress'] = imagecreatetruecolor($w_thumb, $h_thumb); // On crée la miniature vide pour l'image Etat Normal

		$pic['destOver']['ress'] = imagecreatetruecolor($w_thumb, $h_thumb); // On crée la miniature vide pour l'image Etat Over


		// On crée la miniature Normal

		imagecopyresampled($pic['destNormal']['ress'], $pic['src']['ress'], 0, 0, 0, 0, $w_thumb, $h_thumb, $pic['src']['info']['width'], $pic['src']['info']['height']);

		// On crée la miniature Over

		imagecopyresampled($pic['destOver']['ress'], $pic['src']['ress'], 0, 0, 0, 0, $w_thumb, $h_thumb, $pic['src']['info']['width'], $pic['src']['info']['height']);


		// On commence à créer le masque pour le contour coin rond

		$pic['maskBorder']['ress'] = imagecreate($w_thumb, $h_thumb); // On crée le mask vide

		$pic['maskBorder']['green'] = imagecolorallocate($pic['maskBorder']['ress'], 255, 255, 255); // affectation de la couleur verte

		$pic['maskBorder']['pink'] = imagecolorallocate($pic['maskBorder']['ress'], 255, 255, 255); // affectation de la couleur rose

		// Ici on trace la zone à mettre en transparence avant le merge entre les 2 images

		// PRINCIPE : 4 cercle situé dans chauque coin avec un rayon de 2 fois la bordure

		// PRINCIPE : 1 forme polygonale de 8 coter pour peindre de rose la zone restante

		imagefilledellipse($pic['maskBorder']['ress'], $radial, $radial, $radial*2, $radial*2, $pic['maskBorder']['pink']); // cercle gauche supérieur

		imagefilledellipse($pic['maskBorder']['ress'], $w_thumb-$radial, $radial, $radial*2, $radial*2, $pic['maskBorder']['pink']); // cercle droite supérieur

		imagefilledellipse($pic['maskBorder']['ress'], $radial, $h_thumb-$radial, $radial*2, $radial*2, $pic['maskBorder']['pink']); // cercle gauche inférieur

		imagefilledellipse($pic['maskBorder']['ress'], $w_thumb-$radial, $h_thumb-$radial, $radial*2, $radial*2, $pic['maskBorder']['pink']); // cercle droit inférieur

		imagefilledpolygon ($pic['maskBorder']['ress'], array($radial,0,0,$radial,0,$h_thumb-$radial,$radial,$h_thumb,$w_thumb-$radial,$h_thumb,$w_thumb,$h_thumb-$radial,$w_thumb,$radial,$w_thumb-$radial,0), 8, $pic['maskBorder']['pink']); // forme géométrique à 8 coter

		imagecolortransparent($pic['maskBorder']['ress'], $pic['maskBorder']['pink']); // Applique la transparence à la couleur rose


		// On commence à créer le masque pour l'image over

		$pic['maskOver']['ress'] = imagecreate($w_thumb, $h_thumb); // On crée le mask vide

		$pic['maskOver']['white'] = imagecolorallocate($pic['maskOver']['ress'], 0, 130, 198); // On definis la couleur blanche

		$pic['maskOver']['pink'] = imagecolorallocate($pic['maskOver']['ress'], 255, 255, 255); // On definis la couleur blanche qui sera utilisé comme couleur de transparence 

		// Ici on trace la zone à mettre en transparence avant le merge entre les 2 images

		// PRINCIPE : 4 cercle situé dans chauque coin avec un rayon de 2 fois la bordure

		// PRINCIPE : 1 forme polygonale de 8 coter pour peindre de rose la zone restante

		imagefilledellipse($pic['maskOver']['ress'] , $border+$radial, $border+$radial, $radial*2, $radial*2, $pic['maskOver']['pink']); // cercle gauche supérieur

		imagefilledellipse($pic['maskOver']['ress'] , $w_thumb-($border+$radial), $border+$radial, $radial*2, $radial*2, $pic['maskOver']['pink']); // cercle droite supérieur

		imagefilledellipse($pic['maskOver']['ress'] , $border+$radial, $h_thumb-($border+$radial), $radial*2, $radial*2, $pic['maskOver']['pink']); // cercle gauche inférieur

		imagefilledellipse($pic['maskOver']['ress'] , $w_thumb-($border+$radial), $h_thumb-($border+$radial), $radial*2, $radial*2, $pic['maskOver']['pink']); // cercle droit inférieur

		imagefilledpolygon ($pic['maskOver']['ress'] , array($border+$radial,$border,$border,$border+$radial,$border,$h_thumb-($border+$radial),$border+$radial,$h_thumb-$border,$w_thumb-($border+$radial),$h_thumb-$border,$w_thumb-$border,$h_thumb-($border+$radial),$w_thumb-$border,$border+$radial,$w_thumb-($border+$radial),$border), 8, $pic['maskOver']['pink']); // forme géométrique à 8 coter

		imagecolortransparent($pic['maskOver']['ress'] , $pic['maskOver']['pink']); // Applique la transparence à la couleur rose


		// TRAITEMENT SUR L'IMAGE NORMAL

		imagecopymerge($pic['destNormal']['ress'], $pic['maskBorder']['ress'], 0, 0, 0, 0, $w_thumb, $h_thumb, 100); // copie du masque au dessus de la miniature avec une transparence (0%)

		// il faut enlever le vert pour que le fond soit transparent

		if($radial > 0){ // si le radial est de 0 alors ne pas appliquer la transparence parce que le pixel 0,0 n'est pas vert ce qui entraine une transparence sur les zones qui on la meme couleur que le pixel 0,0

			imagetruecolortopalette($pic['destNormal']['ress'], FALSE, 256); // conversion en palette 256 couleur 

			$pic['destNormal']['green'] = imagecolorat($pic['destNormal']['ress'], 0, 0); // affectation de la couleur verte (récupérer au pixel 0,0)

			imagecolortransparent($pic['destNormal']['ress'], $pic['destNormal']['green']); // Applique la transparence à la couleur verte

		}

		// On enregistre la miniature avec bordure coin rond

		imagegif($pic['destNormal']['ress'],'./mini/'.$pic['destNormal']['name'].'.gif');

		imagedestroy($pic['destNormal']['ress']);


		// TRAITEMENT SUR L'IMAGE OVER

		imagecopymerge($pic['destOver']['ress'], $pic['maskOver']['ress'], 0, 0, 0, 0, $w_thumb, $h_thumb, $alpha); // copie du masque au dessus de la miniature avec une transparence ($alpha)

		// Merge du masque du contour

		imagecopymerge($pic['destOver']['ress'], $pic['maskBorder']['ress'], 0, 0, 0, 0, $w_thumb, $h_thumb, 100); // copie du masque au dessus de la miniature avec une transparence ($alpha)

		// il faut enlever le vert pour que le fond soit transparent

		if($radial > 0){ // si le radial est de 0 alors ne pas appliquer la transparence parce que le pixel 0,0 n'est pas vert ce qui entraine une transparence sur les zones qui on la meme couleur que le pixel 0,0

			imagetruecolortopalette($pic['destOver']['ress'], FALSE, 256); // conversion en palette 256 couleur 

			$pic['destOver']['green'] = imagecolorat($pic['destOver']['ress'], 0, 0); // affectation de la couleur verte (récupérer au pixel 0,0)

			imagecolortransparent($pic['destOver']['ress'], $pic['destOver']['green'] ); // Applique la transparence à la couleur verte

		}

		// On enregistre la miniature over 

		imagegif($pic['destOver']['ress'],'./mini/'.$pic['destOver']['name'].'.gif');

		imagedestroy($pic['destOver']['ress']);

	}

	// Retourne les le code html / javascript pour afficher l'image et effectuer le rollOver / rollOut

	return 'src="./mini/'.$pic['destNormal']['name'].'.gif" onMouseOver="this.src=\'./mini/'.$pic['destOver']['name'].'.gif\'" onMouseOut="this.src=\'./mini/'.$pic['destNormal']['name'].'.gif\'"';

}

?>
là où je bloque et où je ne sais pas quoi mettre pour peel c'est ici :
function createThumbWithOver($img_src='./images/dell_d600.jpg',$w_thumb=195,$h_thumb=0,$border=2,$radial=10,$alpha=50){

une fois que ça marche je met un tuto détail par détail pour le mettre en place !!

merci d'une aide...

Share this post


: post
Share on other sites

Posted · Report post

je regarde ça des demain

le principe est de faire une boucle sur le repertoire sur lequel tu as tes images ( avec fopen et while )

apres tu recupere le nom de chaque fichier dans ta boucle et tu le traite avec ta fonction.

c'est a dire ici

function createThumbWithOver($img_src='./images/dell_d600.jpg',$w_thumb=195,$h_thumb=0,$border=2,$radial=10,$alpha=50){

il faut remplacer ce nom de fichier par le repertoire et le nom de l'images

elle est complete ta fonction !!! y a meme les images en hover pour les liens!!!

Share this post


: post
Share on other sites

Posted · Report post

ça donne quelque chose comme ça $f etant le fichier image

$rep = "../images/";

$dir = opendir($rep);

while ($f = readdir($dir)) {

if(is_file($rep.$f)) {

function createThumbWithOver($img_src='./images/'.$f.'',$w_thumb=195,$h_thumb=0,$border=2,$radial=10,$alpha=50);

}

}

:)

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

merci pour ta contribution...

je regarde ça demain matin si possible !

oui elle est bien cette fonction !!

elle met les images en miniature automatiquement en plus de l'effet hover !

est-ce toi qui m'a contacté par mail ?

à bientôt...

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

j'ai mis donc ce code :

$rep = "../images/";

$dir = opendir($rep); 

while ($f = readdir($dir)) {

if(is_file($rep.$f)) {

function createThumbWithOver($img_src='./images/'.$f.'',$w_thumb=195,$h_thumb=0,$border=2,$radial=10,$alpha=50);



	$pic['destOver']['name'] = md5($img_src.$w_thumb.$h_thumb.$border.$radial.$alpha.'over'); // nom du fichier over

	$pic['destNormal']['name'] = md5($img_src.$w_thumb.$h_thumb.$border.$radial.$alpha); // nom du fichier normal


...

...

...

}}
avec un fichiet de test : exemple.php dans lequel il y a :
<?php 

include("thumb.php");

?>


<a href="./images/dell_d600.jpg" target="_blank" border="0"><img <?php echo createThumbWithOver('./images/'.$f.'',155,0); ?> style="cursor:pointer; border:'0';"></a>
ça me donne une erreur :
Parse error: syntax error, unexpected '.', expecting ')' in /home/www/.../miniatest/thumb.php on line 19
la ligne 19 c'est :
function createThumbWithOver($img_src='./images/'.$f.'',$w_thumb=195,$h_thumb=0,$border=2,$radial=10,$alpha=50);

qu'en pense-tu macao45 ?

à bientôt...

Share this post


: post
Share on other sites

Posted · Report post

en attendant essaie

($img_src='./images/'.$f.',$w_thumb=195,$h_thumb=0,$border=2,$radial=10,$alpha=50');

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

merci paulanna...

je pense l'avoir fait...

mais je vias le feraire !

et je donne suite...

à bientôt...

Share this post


: post
Share on other sites

Posted · Report post

tu n'as pas a faire d'echo de cette fonction !!

la fonction ne te renvoit rien ( enfin vue sa structure ..)

il suffit de l'appeler et elle te triate les parameteres rentré ... de plus il te manque des parametres dans ton appel

<?php

if ($_REQUEST['go'] == 'traite' ){

$f=$_REQUEST['image'];

createThumbWithOver($img_src='./images/'.$f.'',$w_thumb=195,$h_thumb=0,$border=2,$radial=10,$alpha=50);

}

?>

<a href="<?php $_SERVER['PHP_SELF'];?>?go=traite&image=ton_image.jpg" >faire image </a>

un truc dans ce style quoi .... :)

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

je patoge !

toujours la même erreur à la même ligne !

à bientôt...

Share this post


: post
Share on other sites

Posted · Report post

($img_src='./images/'.$f.',$w_thumb=195,$h_thumb=0,$border=2,$radial=10,$alpha=50');

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

hélas !

à bientôt...

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

vu que j'ai plein de modifs à faire et que c'est plutôt urgent,

je suis passé sur une formule open source !

ma première boutique sera probablement transforméé en site de présentation ou site de service !

donc un minimum de photos vu que le principe de miniaturisation ne marche pas !

à bientôt...

Share this post


: post
Share on other sites

Posted · Report post

Finalement tu as réussi à minituriser ?

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

finalement j'ai fini par partir de peel...

toi aussi d'ailleurs...

il y a aussi le même pb la version premium de peel :mellow:

sinon le mieux pour peel question miniaturisation c'est ça !

mais il faut juste le mettre en place...

à bientôt...

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

et je suis fainalement revenu !

j'aimerai bien mettre en place ce module !

toute aide est la bienvenue...

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

et je suis fainalement revenu !

j'aimerai bien mettre en place ce module !

toute aide est la bienvenue...

Je vais publier la v4 de shopping sous 10 jours avec 2 ou 3 améliorations

J'essaierais d'y mettre ce bout de script

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

Merci mais comme il y a pas mal de modifs et que je trouve ce script à l'image de ce que je cherché à faire..

la version 4 sera la bienvenue pour les autres...

d'autant plus que là où je bloque c'est une histoire de 15min :

intégrer ce code :

<img src="<?php echo $wwwroot?>/upload/<?php echo $prod['image1']?>" height="110" alt="site" border="0" />
à ce code :
<?php 

include("thumb.php");

?>

...

<a href="./upload/image.jpg" target="_blank" border="0"><img <?php echo createThumbWithOver('./images/'.$f.'',155,0); ?> style="cursor:pointer; border:'0';"></a>

...

à bientôt...

Share this post


: post
Share on other sites

Posted · Report post

Si on a pas thumb.php

Impossible de répondre

Share this post


: post
Share on other sites

Posted · Report post

Bonjour,

Merci d'avance Boss :mellow:

c'est dans le début du tuto voilà le code de thumb.php :

<?php

function createThumbWithOver($img_src,$w_thumb,$h_thumb,$border=10,$radial=10,$alpha=50){


	$pic['destOver']['name'] = md5($img_src.$w_thumb.$h_thumb.$border.$radial.$alpha.'over'); // nom du fichier over

	$pic['destNormal']['name'] = md5($img_src.$w_thumb.$h_thumb.$border.$radial.$alpha); // nom du fichier normal


	$makePic = false; // variable pour vérifcation is on cré les images ou non

	// Routine pour vérifier si le fichier cache existe et si il est plus vieux que l'image d'origine

	if(file_exists('./mini/'.$pic['destNormal']['name'].'.gif') === true ){ // si le fihcier existe ?

		if(intval(filemtime($img_src)) > intval(filemtime('./mini/'.$pic['destNormal']['name'].'.gif'))){ // si le fichier cache est plsu vieux que le fichier source

			$makePic = true; // fichier source est plus récent donc il faut recréer les images

		}else{

			$makePic = false; // le fichier sourve est plsu vieux que le fichier cache donc on ne le recré pas

		}

	}else{

		$makePic = true; // si le fihcier cache n'existe pas il faut le créer

	}


	// Vérification de la variable , piour savoIr si on cré les images

	if($makePic === true){

		// Récupération des infos de l'image source

		list($pic['src']['info']['width'], $pic['src']['info']['height'], $pic['src']['info']['type'], $pic['src']['info']['attr']) = getimagesize($img_src);


		//On vérifie si le parametre de la hauteur est plsu grand que 0

		if($h_thumb == 0){ // si egal a zaro on affecte la hauteur proportionnellement 

			$h_thumb = floor($pic['src']['info']['height'] * $w_thumb / $pic['src']['info']['width']);

		}

		switch($pic['src']['info']['type']){

			case"1": $pic['src']['ress'] = imagecreatefromgif($img_src); break; // Création de l'image pour une source gif

			case"2": $pic['src']['ress'] = imagecreatefromjpeg($img_src); break; // Création de l'image pour une source jpg

			case"3": $pic['src']['ress'] = imagecreatefrompng($img_src); break; // Création de l'image pour une source png

		}


		$pic['destNormal']['ress'] = imagecreatetruecolor($w_thumb, $h_thumb); // On crée la miniature vide pour l'image Etat Normal

		$pic['destOver']['ress'] = imagecreatetruecolor($w_thumb, $h_thumb); // On crée la miniature vide pour l'image Etat Over


		// On crée la miniature Normal

		imagecopyresampled($pic['destNormal']['ress'], $pic['src']['ress'], 0, 0, 0, 0, $w_thumb, $h_thumb, $pic['src']['info']['width'], $pic['src']['info']['height']);

		// On crée la miniature Over

		imagecopyresampled($pic['destOver']['ress'], $pic['src']['ress'], 0, 0, 0, 0, $w_thumb, $h_thumb, $pic['src']['info']['width'], $pic['src']['info']['height']);


		// On commence à créer le masque pour le contour coin rond

		$pic['maskBorder']['ress'] = imagecreate($w_thumb, $h_thumb); // On crée le mask vide

		$pic['maskBorder']['green'] = imagecolorallocate($pic['maskBorder']['ress'], 0, 255, 0); // affectation de la couleur verte

		$pic['maskBorder']['pink'] = imagecolorallocate($pic['maskBorder']['ress'], 255, 0, 255); // affectation de la couleur rose

		// Ici on trace la zone à mettre en transparence avant le merge entre les 2 images

		// PRINCIPE : 4 cercle situé dans chauque coin avec un rayon de 2 fois la bordure

		// PRINCIPE : 1 forme polygonale de 8 coter pour peindre de rose la zone restante

		imagefilledellipse($pic['maskBorder']['ress'], $radial, $radial, $radial*2, $radial*2, $pic['maskBorder']['pink']); // cercle gauche supérieur

		imagefilledellipse($pic['maskBorder']['ress'], $w_thumb-$radial, $radial, $radial*2, $radial*2, $pic['maskBorder']['pink']); // cercle droite supérieur

		imagefilledellipse($pic['maskBorder']['ress'], $radial, $h_thumb-$radial, $radial*2, $radial*2, $pic['maskBorder']['pink']); // cercle gauche inférieur

		imagefilledellipse($pic['maskBorder']['ress'], $w_thumb-$radial, $h_thumb-$radial, $radial*2, $radial*2, $pic['maskBorder']['pink']); // cercle droit inférieur

		imagefilledpolygon ($pic['maskBorder']['ress'], array($radial,0,0,$radial,0,$h_thumb-$radial,$radial,$h_thumb,$w_thumb-$radial,$h_thumb,$w_thumb,$h_thumb-$radial,$w_thumb,$radial,$w_thumb-$radial,0), 8, $pic['maskBorder']['pink']); // forme géométrique à 8 coter

		imagecolortransparent($pic['maskBorder']['ress'], $pic['maskBorder']['pink']); // Applique la transparence à la couleur rose


		// On commence à créer le masque pour l'image over

		$pic['maskOver']['ress'] = imagecreate($w_thumb, $h_thumb); // On crée le mask vide

		$pic['maskOver']['white'] = imagecolorallocate($pic['maskOver']['ress'], 255, 255, 255); // On definis la couleur blanche

		$pic['maskOver']['pink'] = imagecolorallocate($pic['maskOver']['ress'], 0, 255, 0); // On definis la couleur blanche qui sera utilisé comme couleur de transparence 

		// Ici on trace la zone à mettre en transparence avant le merge entre les 2 images

		// PRINCIPE : 4 cercle situé dans chauque coin avec un rayon de 2 fois la bordure

		// PRINCIPE : 1 forme polygonale de 8 coter pour peindre de rose la zone restante

		imagefilledellipse($pic['maskOver']['ress'] , $border+$radial, $border+$radial, $radial*2, $radial*2, $pic['maskOver']['pink']); // cercle gauche supérieur

		imagefilledellipse($pic['maskOver']['ress'] , $w_thumb-($border+$radial), $border+$radial, $radial*2, $radial*2, $pic['maskOver']['pink']); // cercle droite supérieur

		imagefilledellipse($pic['maskOver']['ress'] , $border+$radial, $h_thumb-($border+$radial), $radial*2, $radial*2, $pic['maskOver']['pink']); // cercle gauche inférieur

		imagefilledellipse($pic['maskOver']['ress'] , $w_thumb-($border+$radial), $h_thumb-($border+$radial), $radial*2, $radial*2, $pic['maskOver']['pink']); // cercle droit inférieur

		imagefilledpolygon ($pic['maskOver']['ress'] , array($border+$radial,$border,$border,$border+$radial,$border,$h_thumb-($border+$radial),$border+$radial,$h_thumb-$border,$w_thumb-($border+$radial),$h_thumb-$border,$w_thumb-$border,$h_thumb-($border+$radial),$w_thumb-$border,$border+$radial,$w_thumb-($border+$radial),$border), 8, $pic['maskOver']['pink']); // forme géométrique à 8 coter

		imagecolortransparent($pic['maskOver']['ress'] , $pic['maskOver']['pink']); // Applique la transparence à la couleur rose


		// TRAITEMENT SUR L'IMAGE NORMAL

		imagecopymerge($pic['destNormal']['ress'], $pic['maskBorder']['ress'], 0, 0, 0, 0, $w_thumb, $h_thumb, 100); // copie du masque au dessus de la miniature avec une transparence (0%)

		// il faut enlever le vert pour que le fond soit transparent

		if($radial > 0){ // si le radial est de 0 alors ne pas appliquer la transparence parce que le pixel 0,0 n'est pas vert ce qui entraine une transparence sur les zones qui on la meme couleur que le pixel 0,0

			imagetruecolortopalette($pic['destNormal']['ress'], FALSE, 256); // conversion en palette 256 couleur 

			$pic['destNormal']['green'] = imagecolorat($pic['destNormal']['ress'], 0, 0); // affectation de la couleur verte (récupérer au pixel 0,0)

			imagecolortransparent($pic['destNormal']['ress'], $pic['destNormal']['green']); // Applique la transparence à la couleur verte

		}

		// On enregistre la miniature avec bordure coin rond

		imagegif($pic['destNormal']['ress'],'./mini/'.$pic['destNormal']['name'].'.gif');

		imagedestroy($pic['destNormal']['ress']);


		// TRAITEMENT SUR L'IMAGE OVER

		imagecopymerge($pic['destOver']['ress'], $pic['maskOver']['ress'], 0, 0, 0, 0, $w_thumb, $h_thumb, $alpha); // copie du masque au dessus de la miniature avec une transparence ($alpha)

		// Merge du masque du contour

		imagecopymerge($pic['destOver']['ress'], $pic['maskBorder']['ress'], 0, 0, 0, 0, $w_thumb, $h_thumb, 100); // copie du masque au dessus de la miniature avec une transparence ($alpha)

		// il faut enlever le vert pour que le fond soit transparent

		if($radial > 0){ // si le radial est de 0 alors ne pas appliquer la transparence parce que le pixel 0,0 n'est pas vert ce qui entraine une transparence sur les zones qui on la meme couleur que le pixel 0,0

			imagetruecolortopalette($pic['destOver']['ress'], FALSE, 256); // conversion en palette 256 couleur 

			$pic['destOver']['green'] = imagecolorat($pic['destOver']['ress'], 0, 0); // affectation de la couleur verte (récupérer au pixel 0,0)

			imagecolortransparent($pic['destOver']['ress'], $pic['destOver']['green'] ); // Applique la transparence à la couleur verte

		}

		// On enregistre la miniature over 

		imagegif($pic['destOver']['ress'],'./mini/'.$pic['destOver']['name'].'.gif');

		imagedestroy($pic['destOver']['ress']);

	}

	// Retourne les le code html / javascript pour afficher l'image et effectuer le rollOver / rollOut

	return 'src="./mini/'.$pic['destNormal']['name'].'.gif" onMouseOver="this.src=\'./mini/'.$pic['destOver']['name'].'.gif\'" onMouseOut="this.src=\'./mini/'.$pic['destNormal']['name'].'.gif\'"';

}

?>
et dans le fichier index.php par exemple il y a :
<?php 


include("thumb.php");


?>


<br /><br />

<img <?php echo createThumbWithOver('images/couchersoleil.gif',100,100); ?> style="cursor:pointer;">

c'est justement là que je ne sais pas quoi mettre !! à la place de 'images/couchersoleil.gif'

en locurence mettre : '<?php echo $wwwroot?>/upload/<?php echo $prod['image1']?>' mais ça me donne un code erreur lié à GD

alors qu'en test pour une image c'est ok.

voilà le lien de test

à bientôt...

Share this post


: post
Share on other sites

Posted · Report post

tu as tenté ça ?

<img <?php echo createThumbWithOver('".$wwwroot."/upload/".$prod['image1']."',100,100); ?> style="cursor:pointer;">

Share this post


: post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

Twitter Advisto ecommerce

Facebook PEEL Shopping