Aller au contenu

Upload et redimension d'images auto


Sujets conseillés

Posté

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 :

<?php
if( 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 ;)

Posté

Peut-être n'est-ce pas le forum adéquat ?

Si oui, auriez-vous des bons plans ? Merci.

  • 3 semaines plus tard...
Posté

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];

Posté

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

<?php
function 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

Posté (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:

 
<?php
echo "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é par zao

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...