Page 1 sur 1

script de miniatures

Posté : 03 mars 2012, 14:12
par padymen
Bonjour,
J'ai trouvé il y a quelques temps un script sympa qui me permettais d'uploader des images et de créer dans la foulée des miniatures, le seul petit souci de ce script est qu'il ne permet d'uploader qu'une seule image à la fois.
j'ai donc cherché et trouvé un script qui permet d'uploader autant d'images à la fois qu'on le désire mais ce script ne génère pas de miniatures.
Je voudrais savoir si quelqu'un sur ce forum pourrait m'aider à isoler dans ce script juste la partie permettant de génèrer les miniatures, je galère depuis quelques jours mais sans succès.

voici le script en question :
// on défini le répertoire où sont stockées les images de grande taille
$dir = '../pics';
// on défini le répertoire où seront stockées les miniatures
$dir_mini = '../mini';
// on défini une variable $ratio qui vaudra 150 dans notre cas (150 pixels). En fait, pour nos miniatures, nous allons respecter le ratio de l'image originale, mais nous allons forcer sa taille à 150 pixels, soit en hauteur soit en largeur (tout dépend de l'orientation de notre image : paysage ou portrait).
$ratio = 150;

// on teste si le formulaire permettant d'uploader un fichier a été soumis
if (isset($_POST['go'])) {
	// on teste si le champ permettant de soumettre un fichier est vide ou non
	if (empty($_FILES['mon_image']['tmp_name'])) {
		// si oui, on affiche un petit message d'erreur
		$erreur = 'Aucun fichier envoyé.';
	}
	else {
		// on examine le fichier uploadé en récupérant de nombreuses informations sur ce fichier (je vous suggère de regarder la documentation de la fonction getimagesize pour de plus amples informations)
		$tableau = @getimagesize($_FILES['mon_image']['tmp_name']);
		if ($tableau == FALSE) {
			// si le fichier uploadé n'est pas une image, on efface le fichier uploadé et on affiche un petit message d'erreur
			unlink($_FILES['mon_image']['tmp_name']);
			$erreur = 'Votre fichier n\'est pas une image.';
		}
		else {
			// on teste le type de notre image : jpeg ou png
			if ($tableau[2] == 2 || $tableau[2] == 3) {
				// si on a déjà un fichier qui porte le même nom que le fichier que l'on tente d'uploader, on modifie le nom du fichier que l'on upload
				if (is_file('../pics/'.$_FILES['mon_image']['name'])) $file_upload = '_'.$_FILES['mon_image']['name'];
				else $file_upload = $_FILES['mon_image']['name'];

				// on copie le fichier que l'on vient d'uploader dans le répertoire des images de grande taille
				copy ($_FILES['mon_image']['tmp_name'], $dir.'/'.$file_upload);

				// il nous reste maintenant à générer la miniature

				// si notre image est de type jpeg
				if ($tableau[2] == 2) {
					// on crée une image à partir de notre grande image à l'aide de la librairie GD
					$src = imagecreatefromjpeg($dir.'/'.$file_upload);
					// on teste si notre image est de type paysage ou portrait
					if ($tableau[0] > $tableau[1]) {
						$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
						imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
					}
					else {
						$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
						imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
					}
					// on copie notre fichier généré dans le répertoire des miniatures
					imagejpeg ($im, $dir_mini.'/'.$file_upload);
				}
				elseif ($tableau[2] == 3) {
					$src = imagecreatefrompng($dir.'/'.$file_upload);
					if ($tableau[0] > $tableau[1]) {
						$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
						imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
					}
					else {
						$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
						imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
					}
					imagepng ($im, $dir_mini.'/'.$file_upload);
				}
				// on redirige l'administrateur vers l'accueil de la partie admin
				header('location: index.php');
				exit();
			}
			else {
				// si notre image n'est pas de type jpeg ou png, on supprime le fichier uploadé et on affiche un petit message d'erreur
				unlink($_FILES['mon_image']['tmp_name']);
				$erreur = 'Votre image est d\'un format non supporté.';
			}
		}
	}
}

// on teste si le formulaire permettant de supprimer un fichier à été soumis
if (isset($_GET['del'])) {
	if (empty($_GET['del'])) {
		// si le paramètre n'est pas renseignée, on affiche un petit message d'erreur
		$erreur = 'Aucune image à supprimer';
	}
	else {
		$pic_a_zapper = $_GET['del'];
		// si l'image existe ainsi que sa miniature, on les supprime
		if (is_file('../mini/'.$pic_a_zapper) && is_file('../pics/'.$pic_a_zapper)) {
			unlink('../mini/'.$pic_a_zapper);
			unlink('../pics/'.$pic_a_zapper);
		}
		// si l'image ou la miniature n'existe pas, on affiche un message d'erreur
		else {
			$erreur = 'Image non reconnue';
		}
	}
}
?>


Merci d'avance pour toute aide 

Re: script de miniatures

Posté : 03 mars 2012, 14:19
par Ryle
J'aurais tendance à dire qu'il s'agit de la portion de code qui se trouve sous le commentaire :
// il nous reste maintenant à générer la miniature
;)

Re: script de miniatures

Posté : 03 mars 2012, 14:22
par padymen
Bonjour ryle,
c'est bien ce que je pensais aussi mais en ne prenant que cette partie, cela ne fonctionne pas

Re: script de miniatures

Posté : 03 mars 2012, 14:36
par Ryle
Il ne suffit pas juste de faire un copier/coller de ce code pour qu'il fonctionne, il faut également adapter les variables à ton nouveau script. Par exemple si celui-ci n'a pas de variable $tableau contenant les informations de l'image, tu ne pourras pas l'exploiter pour connaitre l'extension de ton image...

Il faut donc soit reprendre le code de déclaration de la variable $tableau (et peut être d'autres) dans ton nouveau code, ou ré-exploiter celles déjà utilisées par celui-ci :)

Re: script de miniatures

Posté : 03 mars 2012, 14:57
par padymen
re,
c'est bien ce que je pense aussi, mais étant très nul en php, je ne comprend pas tout ce que je dois faire, j'ai essayé en gardant les variables ci dessous mais déjà je ne pense pas que la variable $tableau soit bien écrite,
variables que je garde :
// on défini le répertoire où sont stockées les images de grande taille
$dir = '../pics';
// on défini le répertoire où seront stockées les miniatures
$dir_mini = '../mini';
// on défini une variable $ratio qui vaudra 150 dans notre cas (150 pixels). En fait, pour nos miniatures, nous allons respecter le ratio de l'image originale, mais nous allons forcer sa taille à 150 pixels, soit en hauteur soit en largeur (tout dépend de l'orientation de notre image : paysage ou portrait).
$ratio = 150;
$tableau = @getimagesize($_FILES['mon_image']['tmp_name']);