comment appliquer une fonction en cliquant sur un lien

Eléphant du PHP | 57 Messages

15 juin 2005, 15:35

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");

Mammouth du PHP | 19672 Messages

15 juin 2005, 15:50

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 57 Messages

15 juin 2005, 17:16

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);
}
?>

Mammouth du PHP | 19672 Messages

15 juin 2005, 17:24

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;
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 57 Messages

15 juin 2005, 17:42

[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.

Mammouth du PHP | 19672 Messages

15 juin 2005, 17:48

ta ligne <a href=tec... est dans un echo php ou dans une partie html ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 57 Messages

15 juin 2005, 18:15

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