Vous n'êtes pas identifié(e).
Pages :: 1
Bonjour à tous,
j'ai le script suivant qui me permet de créer des photo miniature dans un répertoire spécifique, mais il me manque une option importante,
si l'image fait plus de 200 en largeur ou plus de 200pixels en longueur, j'aimerais redimensionner l'image d'origine (en gardant les proportion), en une image de maximum 200 sur 200.
Voic mon script :
if(isset($_FILES['up_photo']))
{
unset($erreur);
$extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
// 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 = 50;
$ratiobis = 150;
// Création des dossiers
if (!file_exists($dest_dossier))
{
mkdir ($dest_dossier, 0777);
}
if (!file_exists($dest_dossier_mini))
{
mkdir ($dest_dossier_mini, 0777);
}
// on compte d'abord le nombre d'image dans le répertoire
$num_images = count_files($dest_dossier);
if ($num_images < 10)
{
// on teste si le champ permettant de soumettre un fichier est vide ou non
if (empty($_FILES['up_photo']['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['up_photo']['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['up_photo']['tmp_name']);
$erreur[] = 'Votre fichier n\'est pas une image.';
}
else
{
// vérifications de l'extention
if( !in_array( substr(strrchr($_FILES['up_photo']['name'], '.'), 1), $extensions_ok ) )
{
$erreur[] = 'Veuillez sélectionner un fichier de type png, gif ,jpg ou jpeg !';
}
elseif( file_exists($_FILES['up_photo']['tmp_name'])
and filesize($_FILES['up_photo']['tmp_name']) > $max_size)
{
$erreur[] = 'Votre fichier doit faire moins de 500Ko !';
}
// on détremine la taille de la photo
$up_taille = $_FILES['up_photo']['size'];
$dest_fichier = basename($_FILES['up_photo']['name']);// cela donne le même résultat que la commande ==> $_FILES['up_photo']['name'];
// 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($dest_dossier .$_FILES['up_photo']['name']))
{
// echo 'dest_fichier = '.$dest_fichier;
$dest_fichier = '_'.$_FILES['up_photo']['name'];
// echo 'dest_fichier = '.$dest_fichier;
}
// formatage nom fichier
// enlever les accents
$dest_fichier = strtr($dest_fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
// remplacer les caracteres autres que lettres, chiffres et point par _
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
// on vérifie si le fichier n'est pas déjà présent :
$chemin_fic = $dest_dossier . $dest_fichier;
/*if (file_exists($chemin_fic))
{
$dest_fichier = 'DUP'.$dest_fichier;
echo 'dest_fichier = '.$dest_fichier;
}*/
// si l'image n'est ni un jpeg, ni un png, on supprime le fichier uploadé et on affiche le message d'erreur
if (!($tableau[2] == 2 || $tableau[2] == 3))
{
unlink($_FILES['up_photo']['tmp_name']);
$erreur[] = 'Votre image est d\'un format non supporté. Les formats supportés sont uniquement jpeg et png.';
}
}
}
}
else
{
$erreur[] = 'Vous ne pouvez pas charger plus de 10 photos';
}
// copie du fichier
if(!isset($erreur))
{
// copie du fichier
if (move_uploaded_file($_FILES['up_photo']['tmp_name'], $dest_dossier . $dest_fichier)) // à ce moment on met le fichier sur le serveur
{
// On définit la taille maximum du fichier
// On sépare largeur et hauteur pour faciliter la maintenance
$max_haut = 200;
$max_larg = 200;
// Et on m'enlève ces @ plus dangereux qu'autre chose !!!
// $tableau = getimagesize($_FILES['up_photo']['tmp_name']);
$largeur = $tableau[0];
$hauteur = $tableau[1];
if($largeur > 200 or $hauteur > 200){
// On calcule le ratio à appliquer. On peut enlever le 1 si on veut agrandir les petites images.
// Désolé, j'utilise la méthode du ratio <img src="./images/smilies/icon_wink.gif" alt=";-)" title="Wink" />
$ratiobis = 200;}
else{
$ratiobis = 100;}
// Creation de l'image 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($dest_dossier.'/'.$dest_fichier);
// 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]);
$im_gd = imagecreatetruecolor(round(($ratiobis/$tableau[1])*$tableau[0]), $ratiobis);
imagecopyresampled($im_gd, $src, 0, 0, 0, 0, round(($ratiobis/$tableau[1])*$tableau[0]), $ratiobis, $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]);
$im_gd = imagecreatetruecolor($ratiobis, round(($ratiobis/$tableau[0])*$tableau[1]));
imagecopyresampled($im_gd, $src, 0, 0, 0, 0, $ratiobis, round($tableau[1]*($ratiobis/$tableau[0])), $tableau[0], $tableau[1]);
}
// on copie notre fichier généré dans le répertoire des miniatures
imagejpeg ($im, $dest_dossier_mini.'/'.$dest_fichier);
imagejpeg ($im_gd, $dest_dossier.'/'.$dest_fichier);
}
if ($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);
}
Hors ligne
Salut,
Méthode :
1. tu calcules la hauteur et la largeur de ta photo source
2. tu vérifies que H < 200 et que L < 200
3. si l'un ou l'autre dépasse, tu fais une règle de 3 (mathématique basique) où 200 est ton 3eme parametres (soit hauteur, soit largeur, en fonction de celui qui dépasse.... si les deux parametres dépassent, alors c'est une petite équation pour définir le coef réducteur) et tu stockes tout ça dans des variables
4. lors de la création de ta photo redimensionnée, tu mets les dimensions en variable et tu y affectes celles crées ci-dessus
MERCI de lire le mode d'emploi avant de poster !!
Hors ligne
Bonsoir a tous,
Juste une petite précision sur ce que viens de dire alnoss, il faut appliquer ta réduction en premier sur la dimension la plus grande et la ramener a 200, ainsi tu obtiendra ton coefficient de réduction (ratio) à appliquer sur la deuxième dimension, et ce par le procédé que viens de te donner alnoss.
Dernière modification par Jc (21-04-2010 19:28:02)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Pages :: 1