Page 1 sur 1

comment appliquer une fonction en cliquant sur un lien

Posté : 15 juin 2005, 15:35
par mankind
Hello,

J'ai trouvé une fonction qui permet de lister le contenu d'un répertoire (function DirTri) - qui marche très bien - et une fonction qui permet normalement de créer des vignettes (createThumb ) - je ne l'ai pas encore testée.

Et euh, question bête, comment fait-on pour appliquer la fonction createThumb à une image listée dans mon répertoire (par exemple en cliquant sur le lien créé par la fonction DirTri).

Merci.

Code : Tout sélectionner

// Description : Miniatures en respectant couleurs et homotétie. Sélection de l'image dans un répertoire // ($repSource) et enregistrement dans le répertoire $repDest. // Fonctionne avec jpeget png. A adpater pour d'autres formats. function createThumb($repSource,$repDest,$filename,$thumbSize="100"){ $originalFileName = $repSource."/test".$filename; $destinationFileName = $repDest."/small".$filename; $getExtension = explode(".",$originalFileName); $lastIndex = sizeof($getExtension) - 1; $extension = $getExtension[$lastIndex]; if (preg_match("/^JPE?G$/i", $extension)){ $sourceImage = imagecreatefromjpeg($originalFileName); $jpeg = TRUE; } $imgWidth = imageSX($sourceImage); $imgHeight = imageSY($sourceImage); if($imgWidth>$imgHeight) { $finalWidth = $thumbSize; $finalHeight = round(($thumbSize/$imgWidth)*$imgHeight); } else { $finalWidth = round(($thumbSize/$imgHeight)*$imgWidth); $finalHeight = $thumbSize; } $newImage = imagecreatetruecolor($finalWidth,$finalHeight); ImageCopyResampled($newImage,$sourceImage,0,0,0,0,$finalWidth,$finalHeight,$imgWidth,$imgHeight); $jpeg ? imagejpeg($newImage,$destinationFileName) : false; imagedestroy($newImage); } function DirTri($rep,$tri) { $Array = array(); $dir = opendir($rep); $i=0; while ($File = readdir($dir)){ if($File != "." && $File != ".." && $File != "index.htm") { $Array[] = "$File"; } $i++; } closedir($dir); if($tri == 'DESC'){ rsort($Array); }else{ sort($Array); } $Max = count($Array); for($i = 0; $i != $Max; $i++){ echo "<a href=\"$rep"."$Array[$i]\">$Array[$i]</a><br>"; } echo "<br><br>".$Max." fichier(s)" ; } // utilisation de la fonction // param.1 : chemin du répertoire ("." si il s'agit du rép. courant) // param.2 : ASC ou DESC (A-Z ou Z-A) DirTri("./test/","ASC");

Posté : 15 juin 2005, 15:50
par Cyrano
Dans le principe: tu fais pointer le lien vers la page qui a la fonction de création de vignette, mais dans l'url du lien, tu ajoutes un parmamètre permettant d'identifier l'image source.

Posté : 15 juin 2005, 17:16
par mankind
merci cyrano.

j'ai modifié le lien ainsi :
<a href=thumb2.php?fichier=$Array[$i]>$Array[$i]</a>
(j'ai vérifié que l'url était correctement formée)

sur la page thumb2.php je récupère le nom du fichier ainsi,
$filename = ''.$_GET['fichier'].'';
j'ai vérifié, a priori, les variables $filename et $originalFileName sont correctes. mais rien ne se passe. je me demande comment savoir si c'est la fonction qui ne marche pas ou si c'est moi qui ai mal fait.
Je précise que j'ai une librairie GD v 2.0.
<?php
function createThumb($repSource,$repDest,$filename,$thumbSize="100"){
$originalFileName = $repSource."/test/".$filename;
$destinationFileName = $repDest."/small/".$filename;
$getExtension = explode(".",$originalFileName);
$lastIndex = sizeof($getExtension) - 1;
$extension = $getExtension[$lastIndex];
	if (preg_match("/^JPE?G$/i", $extension)){
		$sourceImage = imagecreatefromjpeg($originalFileName);
		$jpeg = TRUE;
	}
	$imgWidth  = imageSX($sourceImage);
	$imgHeight = imageSY($sourceImage);
	if($imgWidth>$imgHeight)	{
		$finalWidth = $thumbSize;
		$finalHeight = round(($thumbSize/$imgWidth)*$imgHeight);
	} else {
		$finalWidth = round(($thumbSize/$imgHeight)*$imgWidth);
		$finalHeight = $thumbSize;
	}
	$newImage = imagecreatetruecolor($finalWidth,$finalHeight);
	ImageCopyResampled($newImage,$sourceImage,0,0,0,0,$finalWidth,$finalHeight,$imgWidth,$imgHeight);
	$jpeg ? imagejpeg($newImage,$destinationFileName) : false;
	imagedestroy($newImage);
}
?>

Posté : 15 juin 2005, 17:24
par Cyrano
Ton lien modifié tel que tu le présentes envoie en paramètre des variables PHP, pas des valeurs: ça devrait être:
<a href=thumb2.php?fichier=<?php echo($Array[$i]); ?>><?php echo($Array[$i]); ?></a>
Je ne suis pas un spécialise de manipulations d'images, mais tu as une ligne qui ne fait rien du tout, il manque le début:
$jpeg ? imagejpeg($newImage,$destinationFileName) : false;

Posté : 15 juin 2005, 17:42
par mankind
[quote="Cyrano"]Ton lien modifié tel que tu le présentes envoie en paramètre des variables PHP, pas des valeurs: ça devrait être:
<a href=thumb2.php?fichier=<?php echo($Array[$i]); ?>><?php echo($Array[$i]); ?></a>
mh cette ligne ne fonctionne pas du tout.

Posté : 15 juin 2005, 17:48
par Cyrano
ta ligne <a href=tec... est dans un echo php ou dans une partie html ?

Posté : 15 juin 2005, 18:15
par mankind
c'est en php... mais bon, j'ai réussi à faire une vignette en utilisant un autre script trouvé sur phpdébutant.

mon lien :
echo "<a href=test/thumb2.php?fichier=$Array[$i]>$Array[$i]</a><br>";
le nouveau script :
$fichier = ''.$_GET['fichier'].'';
$fichierSource = ''.$fichier.'';
$largeurDestination = 100;
$hauteurDestination = 75;
$im = ImageCreateTrueColor ($largeurDestination, $hauteurDestination)
or die ("Erreur lors de la création de l'image");
$source = ImageCreateFromJpeg($fichierSource);
$largeurSource = imagesx($source);
$hauteurSource = imagesy($source);
ImageCopyResampled($im, $source, 8, 8, 0, 0, $largeurDestination-(2*8), $hauteurDestination-(2*8), $largeurSource, $hauteurSource);
ImageString($im, 0, 12, $hauteurDestination-18, "$fichierSource - ($largeurSource x $hauteurSource)", $blanc);
$miniature = "mini_$fichierSource";
ImageJpeg ($im, $miniature);
echo "Image miniature générée: $miniature";


merci cyrano.

je vais voir si je peux m'en servir correctement...