jean-miche Posté 27 Mars 2010 Partager Posté 27 Mars 2010 Bonjour à tous, grâce à un tuto bien fait sur le SDZ, j'ai pu faire un petit script pour créer une partie d'upload d'images sur mon site. Voici mon script : <?phpif( isset($_POST['upload']) ) // si formulaire soumis{ $content_dir = '../photos/'; // dossier où sera déplacé le fichier $tmp_file = $_FILES['fichier']['tmp_name']; if( !is_uploaded_file($tmp_file) ) { exit("Le fichier est introuvable"); }//RETAILLE IMAGE $ImageChoisie = imagecreatefromjpeg($tmp_file); $TailleImageChoisie = getimagesize($tmp_file); $NouvelleLargeur_mini = 100; //Largeur choisie à 100px mais modifiable $NouvelleLargeur_med = 600; //Largeur choisie à 600px mais modifiable $Reduction = ( ($NouvelleLargeur_mini * 100)/$TailleImageChoisie[0] ); $NouvelleHauteur_mini = ( ($TailleImageChoisie[1] * $Reduction)/100 ); $NouvelleImage_mini = imagecreatetruecolor($NouvelleLargeur_mini , $NouvelleHauteur_mini ) or die ("Erreur"); imagecopyresampled($NouvelleImage_mini , $ImageChoisie , 0,0, 0,0, $NouvelleLargeur_mini, $NouvelleHauteur_mini, $TailleImageChoisie[0],$TailleImageChoisie[1]); $Reduction = ( ($NouvelleLargeur_med * 100)/$TailleImageChoisie[0] ); $NouvelleHauteur_med = ( ($TailleImageChoisie[1] * $Reduction)/100 ); $NouvelleImage_med = imagecreatetruecolor($NouvelleLargeur_med , $NouvelleHauteur_med ) or die ("Erreur"); imagecopyresampled($NouvelleImage_med , $ImageChoisie , 0,0, 0,0, $NouvelleLargeur_med, $NouvelleHauteur_med, $TailleImageChoisie[0],$TailleImageChoisie[1]); imagedestroy($ImageChoisie); $NomImageExploitable = time(); imagejpeg($NouvelleImage_mini , '../photos/'.$NomImageExploitable.'-mini.jpg', 100); imagejpeg($NouvelleImage_med , '../photos/'.$NomImageExploitable.'-med.jpg', 100); $LienImageNews = '../photos/'.$NomImageExploitable.'.jpg'; // on vérifie maintenant l'extension $type_file = $_FILES['fichier']['type']; if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') && !strstr($type_file, 'png') ) { exit("Le fichier n'est pas une image"); } // on copie le fichier dans le dossier de destination $name_file = $NomImageExploitable.'.jpg'; if( !move_uploaded_file($tmp_file, $content_dir . $name_file) ) { exit("Impossible de copier le fichier dans $content_dir"); } $sql= 'INSERT INTO images VALUES ("", "'.$_POST["titre"].'", "'.$NomImageExploitable.'", "'.$_POST["image"].'")'; $res = mysql_query($sql) or die(mysql_error()); if ($res) { $erreurTxt = $successTxT = ""; if ($erreurTxt == "") { $successTxT = "<br /><span class='Style1'>Votre image a bien été ajoutée</span>"; } if ($erreurTxt == "") { //message envoyé echo "<div class='success'>".$successTxT."</div>"; //vert } else { echo "<div class='error'><ul>".$erreurTxt."</ul></div>"; //rouge } //echo 'Le fichier a bien été envoyé'; } //echo "Le fichier a bien été envoyé";}?> <form method="post" enctype="multipart/form-data" action="ajout_photos.php"> <p> Choisir un fichier<br /> <input type="file" name="fichier" size="30"> </p> <p> Choisir une galerie<br /> <select name="image" id="image"> <?php $sql = 'SELECT id_gallerie,nom_gallerie FROM galerie ORDER BY id_gallerie DESC'; $query = mysql_query($sql) or die ("Problème Requete SQL"); while ($ligne = mysql_fetch_assoc ($query)) { $nodept = $ligne ["nodept"]; $nomdept = $ligne ["nom"]; echo '<option value = "'.$ligne["id_gallerie"].'">'.$ligne["nom_gallerie"].'</option>'; } ?> </select> </p> <!-- <p>Titre de la photo<br /> <input name="titre" type="text" /> </p> <br /> --> <input type="submit" name="upload" value="Envoyer" id="btn_upload"> </form> Comment pouvoir uploader des png, des gif, voire des bmp, en plus des jpg/jpeg ?Car on utilise la fonction imagecreatefromjpeg et je n'arrive pas à uploader des gif ou png à moins de changer la fonction dés le départ (par imagecreatefromgif ou imagecreatefrompng), dans quel cas je ne peux alors plus uploader de jpg... Comment redimmensionner les images pour qu'elles aient un ratio ?Ici nous pouvons choisir une nouvelle hauteur ou une nouvelle largeur, mais pas de système qui "bloque" la taille en X ou en Y à une certaine valeur maximale. Et pareil pour la miniature. Comment ne pas redimensionner une image si sa taille est inférieure à la taille choisie ($NouvelleLargeur) ? Merci d'avance aux personnes qui pourront m'aider à obtenir un script comme j'essaie d'en avoir Lien vers le commentaire Partager sur d’autres sites More sharing options...
jean-miche Posté 31 Mars 2010 Auteur Partager Posté 31 Mars 2010 Peut-être n'est-ce pas le forum adéquat ? Si oui, auriez-vous des bons plans ? Merci. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dadou Posté 31 Mars 2010 Partager Posté 31 Mars 2010 Et si tu utilisais une classe toute faite : http://phpthumb.sourceforge.net/ Lien vers le commentaire Partager sur d’autres sites More sharing options...
elow Posté 15 Avril 2010 Partager Posté 15 Avril 2010 1) Utilise une vérification du MIME et en fonction du résultat, tu mets des fonctions différentes, soit : imagecreatefromgif pour le mime image/gif - imagecreatefrompng pour le mime image/png etc etc 2) je n'ai pas bien compris ton problème 3) vérifie avec un "if" si la taille de ton image est supérieure ou pas à la taille souhaitée. Si oui, tu redimensionnes, sinon tu passes cette étape. Pour connaitre la taille de ton image : $taille_origine = getimagesize($_FILES['photo']['tmp_name']);$largeur_img = $taille_origine[0];$hauteur_img = $taille_origine[1]; Lien vers le commentaire Partager sur d’autres sites More sharing options...
jean-miche Posté 19 Avril 2010 Auteur Partager Posté 19 Avril 2010 Merci elow, mais regarde, j'ai trouvé cette fonction qui regroupe tout ce que je souhaiterais pouvoir faire de mes images. <?php resize_clone("/ton/chemin/vers/ton/", "image.png"); ?>n'oublie pas le "/" a la fin du chemin <?phpfunction resize_clone($path, $file){ list($width, $height, $type, $attr) = getimagesize($path.$file); $ratio = $height / $width; if ($height > 500 OR $width > 500) { if($ratio <= 1) { $x = 500; $y = 500*$ratio; } else { $y = 500; $x = 500*(1/$ratio); } } else { if($ratio <= 1) { $x = $width; $y = $width*$ratio; } else { $y = $height; $x = $height*(1/$ratio); } } $size = getimagesize($path.$file); if ( $size) { if ($size['mime']=='image/jpeg' ) { $img_big = imagecreatefromjpeg($path.$file); # On ouvre l'image d'origine $img_new = imagecreate($x, $y); # création de la miniature $img_mini = imagecreatetruecolor($x, $y) or $img_mini = imagecreate($x, $y); // copie de l'image, avec le redimensionnement. imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]); imagejpeg($img_mini,$path."big_".$file ); } elseif ($size['mime']=='image/png' ) { $img_big = imagecreatefrompng($path.$file); # On ouvre l'image d'origine $img_new = imagecreate($x, $y); # création de la miniature $img_mini = imagecreatetruecolor($x, $y) or $img_mini = imagecreate($x, $y); // copie de l'image, avec le redimensionnement. imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]); imagepng($img_mini,$path."big_".$file ); } elseif ($size['mime']=='image/gif' ) { $img_big = imagecreatefromgif($path.$file); # On ouvre l'image d'origine $img_new = imagecreate($x, $y); # création de la miniature $img_mini = imagecreatetruecolor($x, $y) or $img_mini = imagecreate($x, $y); // copie de l'image, avec le redimensionnement. imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]); imagegif($img_mini,$path."big_".$file ); } } if($ratio <= 1) { $x = 90; $y = 90*$ratio; } else { $y = 90; $x = 90*(1/$ratio); } $size = getimagesize($path.$file); if ( $size) { if ($size['mime']=='image/jpeg' ) { $img_big = imagecreatefromjpeg($path.$file); # On ouvre l'image d'origine $img_new = imagecreate($x, $y); # création de la miniature $img_mini = imagecreatetruecolor($x, $y) or $img_mini = imagecreate($x, $y); // copie de l'image, avec le redimensionnement. imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]); imagejpeg($img_mini,$path."mini_".$file ); } elseif ($size['mime']=='image/png' ) { $img_big = imagecreatefrompng($path.$file); # On ouvre l'image d'origine $img_new = imagecreate($x, $y); # création de la miniature $img_mini = imagecreatetruecolor($x, $y) or $img_mini = imagecreate($x, $y); // copie de l'image, avec le redimensionnement. imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]); imagepng($img_mini,$path."mini_".$file ); } elseif ($size['mime']=='image/gif' ) { $img_big = imagecreatefromgif($path.$file); $img_new = imagecreate($x, $y); $img_mini = imagecreatetruecolor($x, $y) or $img_mini = imagecreate($x, $y); imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$size[0],$size[1]); imagegif($img_mini,$path."mini_".$file ); } } unlink($path.$file);}?> Pourriez-vous m'expliquer comment l'utiliser ? Merci d'avance Lien vers le commentaire Partager sur d’autres sites More sharing options...
zao Posté 27 Avril 2010 Partager Posté 27 Avril 2010 (modifié) Tout d'abord il faut etre sur que tu as la librairie GD. car image create utilise cette librairie. Pour cela il faut mettre ce code dans .php et l'executer: <?phpecho "Vous avez PHP ".phpversion();$gd_info = gd_info();if(!$gd_info) die("<br />La librairie GD n'est pas installée !");echo "<br />Vous avez GD {$gd_info['GD Version']}"; ?> Ensuite le code que tu as mis ici n'est qu'un code de redimension, il faut aussi uploader les fichiers. Voici ce que moi j'utilise: 1/ le formulaire <form action="" method="post" enctype="multipart/form-data" name="uploadphoto" id="uploadphoto"><input type='file' name='userfile' id='userfile'/><input type='submit' name='ENVOYER' id='ENVOYER' value='ENVOYER LES PHOTOS' /></form> 2/ le systeme d'upload //dossier d'upload:$dossier = "upload";//dimensions de l'image :$hauteur = "154"; $largeur = "205";//taille en octect$MFS=2097152 ;if($_FILES['userfile']['name'] != ""){ if($_FILES['userfile']['size']>0 and $_FILES['userfile']['size']<$MFS){if ($_FILES['userfile']['type'] == "image/pjpeg" or $_FILES['userfile']['type'] =="image/jpeg" or $_FILES['userfile']['type'] =="image/jpg") {$code_nom = rand(10000000,100000000); session_register('code_nom'); $affup1 = $_FILES['userfile']['name'];include("redim.php");}else {echo "Mauvaise extension: Nous n'acceptons ces deux formats : JPG et JPEG";}}else{echo "<font color=red>FICHIER: ".$_FILES['userfile']['name']." TROP LOURD</font></br>POID DE : ".$_FILES['userfile']['name']." = ".$_FILES['userfile']['size']." OCTETS</br>";}} 3/ Le traitement librairie GD et redimension (fichier redim.php) <?php //JE RECUPERE L'IMAGE EN JPG : $ImageChoisie = imagecreatefromjpeg($_FILES['userfile']['tmp_name']); //JE VERIFIE SA TAILLE : $TailleImageChoisie = getimagesize($_FILES['userfile']['tmp_name']); // //JE DEFINIS LA NOUVELLE TAILLE DE L'IMAGE QUI SERA INSEREE : if($TailleImageChoisie[1] > $hauteur){include("redimL.php");}else{ if($TailleImageChoisie[0] > $largeur){$NouvelleTailleImage = $hauteur;}else{$NouvelleTailleImage = $TailleImageChoisie[0] ;} //JE CALCULE LE POURCENTAGE DE REDUCTION : $Reduction = ( ($NouvelleTailleImage * 100)/$TailleImageChoisie[0] ); //JE DEFINIS LA NOUVELLE LARGEUR DE L'IMAGE : $NouvelleHauteurImage = ( ($TailleImageChoisie[1] * $Reduction) / 100); //ON CREE DONC UN DOUBLE DE L'IMAGE QUI SERA CELLE AFFICHEE : $ImageChoisie = imagecreatefromjpeg($_FILES['userfile']['tmp_name']); $NouvelleImage = imagecreatetruecolor($NouvelleTailleImage , $NouvelleHauteurImage) or die ("Erreur"); //PUIS JE COPIE ET JE REECHANTILLONNE L'IMAGE DE DEPART : imagecopyresampled($NouvelleImage , $ImageChoisie , 0,0, 0,0, $NouvelleTailleImage , $NouvelleHauteurImage, $TailleImageChoisie[0],$TailleImageChoisie[1]); //JE N'AI PLUS QU'A DETRUIRE L'IMAGE CHOISIE AU DEPART QUI NE SERT PLUS A RIEN : imagedestroy($ImageChoisie); // JE NE GARDE QUE LE NOM DE L'IMAGE SANS SON EXTENSION : $NomImageChoisie = explode('.', $_FILES['userfile']['name']); //JE L'APPELLE $NomImageExploitable : $NomImageExploitable =''; // JE NOMME LE PREMIER TERME DE L'EXPLODE : i // $i=0; //JE DECOUPE LE TERME NomImage EN AUTANT DE CHAÎNE QU'il Y EN A GRACE A -1, ET LE PREMIER TERME JE L'APPELLE $NomImage[0] // while($i< (count($NomImageChoisie)-1) ) // { /// $NomImageExploitable = $NomImageChoisie[0]; // $i++; // } //LA PREMIERE CHAINE EST NomImageExploitable, JE LA PASSE EN IMAGEJPEG POUR EN CREER UN FICHIER JPEG AVEC UNE QUALITE DE 100 : $NomImageExploitable = ${'code_nom'.$i} ; imagejpeg($NouvelleImage , $dossier."/".$NomImageExploitable.'.jpg', 100); //LE LIEN VERS L'IMAGE EST DONC : $LienImageNews = $dossier."/".$NomImageExploitable.'.jpg'; //resultat //echo "<div align=center><font color=blue>Votre photo: ".$_FILES[$userfile]['name']." vient d'etre uploade </font></div></br>"; chmod("".$LienImageNews."", 0644); echo "<font color='#6382A0'>Photo uploadé : </font>".$LienImageNews."</br>"; } ?> Voila bon ce code est pour du JPG mais il suffit de rajouter or $_FILES['userfile']['type'] =="image/png" ou autre extension pour ne pas les bloquer. Modifié 27 Avril 2010 par zao Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant