Aide - Recherche - Membres - Calendrier
Version complète : Problème avec le tuto "copier une image"
Forum Développeur - Administration serveur, programmation et base de données > Programmation > PHP
cinesia
Voilà j'ai suivi à la lettre le tuto "Copier une image sur le serveur et créer la vignette" (ici)
mais ça ne fonctionne pas, c'est le fichier copy.php qui doit avoir une erreur de code car la page est blanche et le fichier n'est pas copier sur le serveur.
J'ai vu qu'il manquait un ; et que les echo en bas était mal écrient mais ce n'est pas suffisant il y a encore des erreurs et je ne vois pas ou ?
Est-ce que quelqu'un y voit plus claire ?

Voici le code de la page copy.php :

Php
<?php
$hauteur_max="400";
 
$largeur_max="400";
 
$poid_max="100000";
 
$destination_photo="images";
 
$destination_vignette="styles";
 
$proportion="4";
 
$taille = getimagesize("$image");
 
$h_i = $taille[1];
 
$w_i = $taille[0];
 
$poid = filesize("$image");
 
if (($h_i<=$hauteur_max)&($w_i<=$largeur_max)&($poid<=$poid_max)) {
 
 
 
/////////////////on supprime les accents et les espaces du nom de l'image
 
$image_name = strtr($image, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
 
"aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
 

 
/////////////on supprime les espaces
 
$image_name=str_replace(" ","_",$image_name);
copy($image,"$destination_photo/$image_name");
 
$imagefile="$destination_photo/$image_name";
 
$src_img = imagecreatefromjpeg($imagefile);
 
$new_w = imagesx($src_img)/$proportion;
 
$new_h = imagesy($src_img)/$proportion;
 
$dst_img = imagecreate($new_w,$new_h);
 
imagecopyresized($dst_img,$src_img,0,0,0,0,$new_w,$new_h,imagesx($src_img),imagesy($src_img));
 
if (imagejpeg($dst_img,"$destination_vignette/$image_name")) {
 
echo "creer";
 
} else {
 
echo "pas creer";
 
}
}
 
else {
 
echo "pas creer2";
 
}
?>
Antoine
Et il ne te mets pas un message d'erreur ?
cinesia
J'ai réussi avec autre chose mais impossible de redimensionner l'image... IM..PO..SSIBLE (je viens de passé la journée dessus il n'y a pas moyen ça ne veut pas redimensionner.)

dites-moi si j'ai des problèmes des visions mais il me semble que ce code est juste :

Code
<?php
$dir = '/home/httpd/vhosts/cinesia.ch/httpdocs/nextversion/images/news';

if (isset($_POST['go'])) {
   if (empty($_FILES['mon_image']['tmp_name'])) {
       $erreur = 'Aucun fichier envoyé.';
   }
   else {
       $tableau = @getimagesize($_FILES['mon_image']['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['mon_image']['tmp_name']);
           $erreur = 'Votre fichier n\'est pas une image.';
       }
       else {
           if ($tableau[2] == 2) {
   
   copy ($_FILES['mon_image']['tmp_name'], $dir.'/'.'mainnews.jpg');
   
   
   if ($tableau[2] == 2) {
                   // on crée une image à partir de notre grande image à l'aide de la librairie GD
                   $src = imagecreatefromjpeg($_FILES['mon_image']['tmp_name']);
                   
                       $im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
                       imagecopyresampled($im, $src, 0, 0, 0, 0, 180, 135, $tableau[0], $tableau[1]);

                   // on copie notre fichier généré dans le répertoire des miniatures
                   imagejpeg ($im, $dir.'/'.'mainnews.jpg');
 
           }
           else {
               // si notre image n'est pas de type jpeg ou png ou gif, on supprime le fichier uploadé et on affiche un petit message d'erreur
               unlink($_FILES['mon_image']['tmp_name']);
               $erreur = 'Votre image est d\'un format non supporté.';
           }
       }
   }
}
?>
cinesia
Y a-t-il un endroit sur internet où je puis trouver un tuto clair sur comment redimmensionner un image en php (via la librairie GD) ??

C'est curieux je ne trouve rien ! Pourtant c'est quelque chose de courant il me semble.
(J'en avais trouvé un mais l'image une fois redimensionnée était de mauvaise qualité.)
Antoine
http://www.google.com/search?le=en&ie=UTF-...:en-GB:official Tu rigoles ou tu n'as pas cherché ? icon_mrgreen.gif
cinesia
Merci beaucoup, c'est très bon comme tuto.

Mais le même problème perciste : l'image créer (redimensionnée) est de mauvaise qualité ( http://www.cinesia.net/nextversion/images/vignette.jpg ) y a-t-il quelque chose que je peux rajouté pour que l'image soit plus net ?

voilà le code en question :
regardez plutôt vers le bas de ce code (la partie "Créer la vignette") Y a-t-il quelque chose qu'on peut modifier ou rajouté pour rendre l'image moins compressée ?

Php
function redimage($img_src,$img_dest,$dst_w,$dst_h) {
// Lit les dimensions de l'image
$size = GetImageSize($img_src);
$src_w = $size[0]; $src_h = $size[1];
// Teste les dimensions tenant dans la zone
$test_h = round(($dst_w / $src_w) * $src_h);
$test_w = round(($dst_h / $src_h) * $src_w);
// Si Height final non précisé (0)
if(!$dst_h) $dst_h = $test_h;
// Sinon si Width final non précisé (0)
elseif(!$dst_w) $dst_w = $test_w;
// Sinon teste quel redimensionnement tient dans la zone
elseif($test_h>$dst_h) $dst_w = $test_w;
else $dst_h = $test_h;
 
// La vignette existe ?
$test = (file_exists($img_dest));
// L'original a été modifié ?
if($test)
$test = (filemtime($img_dest)>filemtime($img_src));
// Les dimensions de la vignette sont correctes ?
if($test) {
$size2 = GetImageSize($img_dest);
$test = ($size2[0]==$dst_w);
$test = ($size2[1]==$dst_h);
}
 
// Créer la vignette ?
if(!$test) {
// Crée une image vierge aux bonnes dimensions
// $dst_im = ImageCreate($dst_w,$dst_h);
$dst_im = ImageCreateTrueColor($dst_w,$dst_h);
// Copie dedans l'image initiale redimensionnée
$src_im = ImageCreateFromJpeg($img_src);
// ImageCopyResized($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
ImageCopyResampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
// Sauve la nouvelle image
ImageJpeg($dst_im,$img_dest);
// Détruis les tampons
ImageDestroy($dst_im);
ImageDestroy($src_im);
}
Antoine
non, la compression par la librairie GD n'est pas bonne.
Même avec un ImageCreateTrueColor.

Essaye en variant le type d'image généré. Peut-être que le PNG sera meilleur.
cinesia
je croyais que le png n'était pas affiché par tous les navigateurs ?
Antoine
Si si. Il y a juste IE qui ne supporte pas le PNG transparent wink.gif
cinesia
Ah ok ! merci !

donc il me suffit de remplacer cette ligne :
Code
ImageJpeg($dst_im,$img_dest);


par
Code
ImagePng($dst_im,$img_dest);
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2009 Invision Power Services, Inc.