Upload multiple image gif/jpg/png avec rotation, miniature gardant les proportions et ajout d'un copyright

Description

Alors voilà,

Maintenant que j'ai assez profité de toutes les astuces que fournis ce site, je me suis dit que je pouvais essayer d'aider les autres.

J'ai cherché pendant longtemps un upload bien expliqué, et pour finir je me le suis fait moi-même ;) en cherchant sur le site de php.net. De plus j'ai aussi fait en sorte qu'il redimensionne direct l'image comme désiré.

Dans le zip il y a 2 fichiers d'upload un permettant une miniature qui garde les proportions de l'originale et l'autre qui crée une miniature aux dimension données, déformant l'original.
J'y ai maintenant rajouté un fichier avec formulaire su rla page .php qui permet d'uploader plusieurs fichiers en une fois :D

Etant un programmeur amateur, je vous demanderai de bien vouloir être indulgents.

Source / Exemple :


index.php :
-----------
<html>
<head>
<title>Upload</title>
</head>

<body>
<form method="post" action="upload.php" enctype="multipart/form-data">

<?php
$nbr_champs = 10;
for($nbr=0;$nbr<$nbr_champs;$nbr++){
?>

  <?php echo $nbr; ?>. <input type="file" name="fichier_upload_<?php echo $nbr; ?>" id="fichier_upload_<?php echo $nbr; ?>"><br />
  <select name="fichier_rotation_<?php echo $nbr; ?>">
    <option>Pas de rotation</option>
    <option value="90">90° gauche</option>
    <option value="270">90° droite</option>
    <option value="180">180°</option>
  </select>
  <br />

<?php
}
?>

  <input type="submit" name="Submit" value="Uploader">
  <input name="nbr_f" type="hidden" value="<?php echo $nbr_champs; ?>">
</form>
</body>
</html>

upload.php :
---------------------------------------
<?php
// nombre de fichiers à uploader
$nbr_fichiers = $_POST['nbr_f'];

// boucle permettant d'uploader les fichiers un à un
for($nbr=0;$nbr<$nbr_fichiers;$nbr++){

// on récupère les infos du fichier à uploader
$fichier_temp = $_FILES['fichier_upload_'.$nbr]['tmp_name'];
$fichier_nom = $_FILES['fichier_upload_'.$nbr]['name'];

// on défini les dimensions et le type du fichier
list($fichier_larg, $fichier_haut, $fichier_type, $fichier_attr)=getimagesize($fichier_temp);

// infos de contrôle du fichier
$fichier_poids_max = 500000;
$fichier_h_max = 1224;
$fichier_l_max = 1632;

// gestion du copyright
// 0 = pas de copyright
// 1 = ajout d'un copyright sur les images uploadées
// 2 = ajout d'un copyright sur les images uploadées
//     mais tout en gardant une copie de l'image originale sans le copy.
$copyright = 2;
$opacite = 100;

// source du logo copyright
// ATTENTION si vous voulez utiliser un logo au format .jpg ou .png aucun soucis
// il suffit de remplacer imagecreatefromgif par imagecreatefromjpeg ou imagecreatefrompng
$copyright_logo = imagecreatefromgif('logo.gif');

// dossier de destination
$fichier_dossier = 'images/';

// extension du fichier
$fichier_ext = substr($fichier_nom,strrpos( $fichier_nom, '.')+1);

// on renomme le fichier
$fichier_date = date("ymdhis");
$fichier_n_nom = $nbr."_".$fichier_date.".".$fichier_ext;

	// on vérifie s'il y a bien un fichier à uploader
	if (!empty($fichier_temp) && is_uploaded_file($fichier_temp)) {
	
		// on vérifie le poids du fichier
		if (filesize($fichier_temp)<$fichier_poids_max) {
		
			// types de fichiers autorises 1=gif / 2=jpg / 3=png
			if (($fichier_type===1) || ($fichier_type===2) || ($fichier_type===3)) {
			
				// on vérifie si l'image n'est pas trop grande
				if (($fichier_larg<=$fichier_l_max) && ($fichier_haut<=$fichier_h_max)) {
				
					// si le fichier est ok, on l'upload sur le serveur
					if (move_uploaded_file($fichier_temp, $fichier_dossier.$fichier_n_nom)) {
					
						// on donne un acces total sur le fichier
						chmod ($fichier_dossier.$fichier_n_nom, 0777);
						
							/******************
							rotation de l'image

                                    • /
if (!empty($_POST['fichier_rotation_'.$nbr]) && is_numeric($_POST['fichier_rotation_'.$nbr])) { $degre_rotation = $_POST['fichier_rotation_'.$nbr]; $image = getimagesize($fichier_dossier.$fichier_n_nom); // création de l'image if($fichier_type == "1") { $source = imagecreatefromgif($fichier_dossier.$fichier_n_nom); } if($fichier_type == "2") { $source = imagecreatefromjpeg($fichier_dossier.$fichier_n_nom); } if($fichier_type == "3") { $source = imagecreatefrompng($fichier_dossier.$fichier_n_nom); } //rotation de l'image $rotation = imagerotate($source,$degre_rotation,1); //Le -1 permet de remplir les zones vides avec du transparent // sauvegarde de l'image finale if($fichier_type == "1") { imagegif($rotation,$fichier_dossier.$fichier_n_nom); } if($fichier_type == "2") { imagejpeg($rotation,$fichier_dossier.$fichier_n_nom); } if($fichier_type == "3") { imagepng($rotation,$fichier_dossier.$fichier_n_nom); } if (($degre_rotation == '90') || ($degre_rotation == '270')) { $n_larg = $fichier_haut; $n_haut = $fichier_larg; $fichier_larg = $n_larg; $fichier_haut = $n_haut; } } /***************************** ajout d'un copyright sur les photos
                                                          • /
if ($copyright == 0) { // pas d'ajout de copyright } elseif ($copyright != 0) { // source de la photo if ($fichier_type===1) { $copyright_photo = imagecreatefromgif($fichier_dossier.$fichier_n_nom); } elseif ($fichier_type===2) { $copyright_photo = imagecreatefromjpeg($fichier_dossier.$fichier_n_nom); } else { $copyright_photo = imagecreatefrompng($fichier_dossier.$fichier_n_nom); } // on récupère les dimensions du logo et de la photo $larg_logo = imagesx($copyright_logo); $haut_logo = imagesy($copyright_logo); $larg_photo = imagesx($copyright_photo); $haut_photo = imagesy($copyright_photo); // on calcule la position du logo, ici en bas à droite $poslogo_x = $larg_photo - ($larg_logo + 5); $poslogo_y = $haut_photo - ($haut_logo + 5); // on colle le logo au dessus de l'image imagecopymerge($copyright_photo, $copyright_logo, $poslogo_x, $poslogo_y, 0, 0, $larg_logo, $haut_logo, $opacite); // si 1, on écrase l'image sans copyright if ($copyright == 1) { if ($fichier_type===1) { imagegif($copyright_photo, $fichier_dossier.$fichier_n_nom); } elseif ($fichier_type===2) { imagejpeg($copyright_photo, $fichier_dossier.$fichier_n_nom); } else { imagepng($copyright_photo, $fichier_dossier.$fichier_n_nom); } } // si 2, on crée une nouvelle image avec le copyright else { if ($fichier_type===1) { imagegif($copyright_photo, $fichier_dossier.'c_'.$fichier_n_nom); } elseif ($fichier_type===2) { imagejpeg($copyright_photo, $fichier_dossier.'c_'.$fichier_n_nom); } else { imagepng($copyright_photo, $fichier_dossier.'c_'.$fichier_n_nom); } } } /******************** création de la miniature
                                        • /
// dimension maximale largeur et hauteur comprise $taille_max = 100; // si le fichier est plus grand que $taille_max on le miniaturise if (($fichier_larg > $taille_max) || ($fichier_haut > $taille_max)) { // définition des dimensions if (($fichier_haut > $taille_max) && ($fichier_haut >> $fichier_larg)) { $mini_haut = $fichier_haut / ($fichier_larg / $taille_max); $mini_larg = $taille_max; } else { $mini_haut = $taille_max; $mini_larg = $fichier_larg / ($fichier_haut / $taille_max); } // si le fichier est un .gif if ($fichier_type === 1){ // definition de l'image dont on va faire une miniature $fichier_source = imagecreatefromgif($fichier_dossier.$fichier_n_nom); // on prépare le fichier miniature qui accueillera l'image réduite $fichier_reduit = imagecreate($mini_larg, $mini_haut); // fond blanc pour l'image $fond_blanc = imagecolorallocate($fichier_reduit, 255, 255, 255); // dimensions x et y à donner au fichier $fichier_larg_red = imagesx($fichier_reduit); $fichier_haut_red = imagesy($fichier_reduit); // on rajoute un mini_ defant le nom du fichier $nom_fichier_reduit = 'mini_'.$fichier_n_nom; // on redimensionne l'image de base dans le fichier $fichier_reduit imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_larg_red, $fichier_haut_red, $fichier_larg, $fichier_haut); // on rend transparent le fond blanc imagecolortransparent($fichier_reduit, $fond_blanc); // crée le fichier réduit définitif imagegif($fichier_reduit, $fichier_dossier.$nom_fichier_reduit); // on donne un acces total sur le fichier chmod($fichier_dossier.$nom_fichier_reduit, 0777); } // si le fichier est un .jpg / .jpeg if ($fichier_type===2){ // définition de la qualité $qualite=80; // definition de l'image dont on va faire une miniature $fichier_source = imagecreatefromjpeg($fichier_dossier.$fichier_n_nom); // on prépare le fichier miniature qui accueillera l'image réduite $fichier_reduit = imagecreatetruecolor($mini_larg, $mini_haut); // dimensions x et y à donner au fichier $fichier_larg_red = imagesx($fichier_reduit); $fichier_haut_red = imagesy($fichier_reduit); // on rajoute un mini_ defant le nom du fichier $nom_fichier_reduit = 'mini_'.$fichier_n_nom; // on redimensionne l'image de base dans le fichier $fichier_reduit imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_larg_red, $fichier_haut_red, $fichier_larg, $fichier_haut); // crée le fichier réduit définitif imagejpeg($fichier_reduit, $fichier_dossier.$nom_fichier_reduit, $qualite); // on donne un acces total sur le fichier chmod($fichier_dossier.$nom_fichier_reduit, 0777); } // si le fichier est un .png if ($fichier_type===3){ // definition de l'image dont on va faire une miniature $fichier_source = imagecreatefrompng($fichier_dossier.$fichier_n_nom); // on prépare le fichier miniature qui accueillera l'image réduite $fichier_reduit = imagecreatetruecolor($mini_larg, $mini_haut); // dimensions x et y à donner au fichier $fichier_larg_red = imagesx($fichier_reduit); $fichier_haut_red = imagesy($fichier_reduit); // on rajoute un mini_ defant le nom du fichier $nom_fichier_reduit = 'mini_'.$fichier_n_nom; // on redimensionne l'image de base dans le fichier $fichier_reduit imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_larg_red, $fichier_haut_red, $fichier_larg, $fichier_haut); // crée le fichier réduit définitif imagepng($fichier_reduit, $fichier_dossier.$nom_fichier_reduit); // on donne un acces total sur le fichier chmod($fichier_dossier.$nom_fichier_reduit, 0777); } // si le fichier est plus petit que $taille_max pas besoin de le miniaturiser } else { $nom_fichier_reduit = $fichier_n_nom; } /************************************* enregistrement dans la base de données nom du fichier non réduit : ---------------------------------- $fichier_n_nom nom du fichier réduit : ---------------------------------- $nom_fichier_reduit
                                                                          • /
echo "Le fichier n°".$nbr." a été uploadé avec succès<br />"; } else { echo "Le fichier n°".$nbr." n'a pas pu être uploadé<br />"; } } else { echo "Le fichier n°".$nbr." est trop grand<br />"; } } else { echo "Le fichier n°".$nbr." n'a pas le bon format<br />"; } } else { echo "Le fichier n°".$nbr." est trop lourd<br />"; } } else { echo "Pas de fichier à uploader dans le champ n°".$nbr."<br />"; } } ?>

Conclusion :


J'ai réussi à modifier de façon à pouvoir uploader plusieurs fichiers, comme on dit, quand on cherche on trouve :D

Good bye all, et merci.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.