upload + copy + redimensionnement = moche :)

Eléphant du PHP | 299 Messages

16 janv. 2010, 01:38

Salut a tous!!!

J' ai un petit souci, je me lance un peu dans l' upload et surtout les petites fonctions qui vont a coté comme copy createtruecolor et encore d' autres.


Mon projet est simple et il fonctionne sur le point technique:

1 - je choisis une image a uploader
2 - avant l' upload, je copie l' image dans le dossier "articles/miniatures"
3 - je redimensionne de sa taille originale a une taille "miniature"
4 - maintenant que c' es tcopié et redimensionné j' upload l' originale dans le dossier "articles"

Il y a un gros souci sur la qualité, je ne sais pas pourquoi , c' est super moche, et j' ai beau chercher, ca depasse maintenant mes competences. Je sais que mon code est pas beau, mais je suis debutant et bon, ca fonctionne :)

Que pourrai je faire pour ne pas perdre la qualité de la miniature, ou alors j' ai commis une erreur?

Merci d' avance :/
J' ai bien espacé pour que vous compreniez.
<?php


			//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg...<br><br> Taille de la photo maxi : 500 Ko';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier, 
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
	 }
     copy($_FILES['photo1']['tmp_name'], $dossier_m . $fichier) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
	 
?>

















<?php
$file = '../images/articles/miniatures/'.$fichier.'' ; # L'emplacement de l'image à redimensionner. L'image peut être de type jpeg, gif ou png

$x = 100;

$y = 100; # Taille en pixel de l'image redimensionnée

$size = getimagesize($file);

if ( $size) {
echo 'Image en cours de redimensionnement...
';

if ($size['mime']=='image/jpeg' ) {
$img_big = imagecreatefromjpeg($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,$file );

}
elseif ($size['mime']=='image/png' ) {
$img_big = imagecreatefrompng($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,$file );

}
elseif ($size['mime']=='image/gif' ) {
$img_big = imagecreatefromgif($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,$file );

}
echo 'Image redimensionnée !
';
}
?> 





















<?php


			//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg...<br><br> Taille de la photo maxi : 500 Ko';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier, 
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
	 }
     move_uploaded_file($_FILES['photo1']['tmp_name'], $dossier . $fichier) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
	 
?>

Eléphant du PHP | 168 Messages

16 janv. 2010, 10:35

je ne suis pas un spécialiste de ce genre de choses mais il existe des fichiers images qui sont très commpressés et donc sur lesquels le redimmensionnement est fortement déconseillé!

Eléphant du PHP | 299 Messages

16 janv. 2010, 10:44

Salut a tous, on m' a conseillé de mettre imagecopyresampled au lieu de imagecopyresized et une qualité bien acceptable est au rendez-vous, si ce botu peut servir a quelqu' un, merci d' avori repondu en totu cas :)

Eléphant du PHP | 451 Messages

16 janv. 2010, 11:11

Et aussi pour la fonction imagejpeg() tu peux mettre un 3ème argument qui est la qualité (compris entre 0 et 100).