IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Upload images miniatures


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 109
    Par défaut Upload images miniatures
    Bonjour à vous,

    J'essaye depuis de jour de faire un script d'upload d'image
    ( Je sais, je ne suis pas très doué )

    Je suis finalement arrivé tant bien que mal à faire marcher quelque chose qui envoie dans un dossier image après redimensionnement.

    Ma problème est que j'aimerais garder deux version de mon image uploadé, l'originale et la miniature.
    Mais c'est un peu le souk dans mon script et je ne sais pas vraiment où placer le fait de garder l’originale.

    Quelqu'un peu m'aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
     
        define('TARGET', 'images/');
        define('MAX_SIZE', 200000); 
        define('WIDTH_MAX', 1920);
        define('HEIGHT_MAX', 1080);
     
        $tabExt = array('jpg','gif','png','jpeg'); 
        $infosImg = array();
     
        $extension = '';
        $message = '';
        $nomImage = '';
     
     
    if(!empty($_POST)){ 
            // On verifie si le champ est rempli 
            if( !empty($_FILES['fichier']['name']) ) {
                // Recuperation de l'extension du fichier 
                $extension = pathinfo($_FILES['fichier']['name'], PATHINFO_EXTENSION); 
                // On verifie l'extension du fichier 
                if(in_array(strtolower($extension),$tabExt)) { 
                    // On recupere les dimensions du fichier 
                    $infosImg = getimagesize($_FILES['fichier']['tmp_name']); 
                    // On verifie le type de l'image 
                    if($infosImg[2] >= 1 && $infosImg[2] <= 14) {
                        // On verifie les dimensions et taille de l'image 
                        if(($infosImg[0] <= WIDTH_MAX) && ($infosImg[1] <= HEIGHT_MAX) && 
                                (filesize($_FILES['fichier']['tmp_name']) <= MAX_SIZE)){ 
                        //on redimentionne limage
     
                        $x = 300; 
                        $y = 200; # Taille en pixel de l'image redimensionnée 
     
    							}
     
                        if ($infosImg) echo 'Image redimensionnée ... '; 
     
                        if ($infosImg['mime']=='image/jpeg' ) { 
                            $img_big = imagecreatefromjpeg($_FILES['fichier']['tmp_name']); # 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,$infosImg[0],$infosImg[1]); 
     
                            imagejpeg($img_mini,$_FILES['fichier']['tmp_name'] ); 
                        }
                        elseif ($infosImg['mime']=='image/png' ) { 
                            $img_big = imagecreatefrompng($_FILES['fichier']['tmp_name']); # 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,$infosImg[0],$infosImg[1]); 
     
                            imagepng($img_mini,$_FILES['fichier']['tmp_name'] ); 
                        }
                        elseif ($infosImg['mime']=='image/gif' ) { 
                            $img_big = imagecreatefromgif($_FILES['fichier']['tmp_name']); # 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,$infosImg[0],$infosImg[1]); 
     
                            imagegif($img_mini,$_FILES['fichier']['tmp_name'] ); 
                        }
     
                        { 
                            // Parcours du tableau d'erreurs 
                            if(isset($_FILES['fichier']['error']) 
                                && UPLOAD_ERR_OK === $_FILES['fichier']['error']) { 
                                // On renomme le fichier 
                                $nomImage = md5(uniqid()) .'.'. $extension; 
                                // Si c'est OK, on teste l'upload 
                                if(move_uploaded_file($_FILES['fichier']['tmp_name'], TARGET.$nomImage)) { 
                                    $message = 'Upload réussi !';
                                } 
                                else { 
                                    // Sinon on affiche une erreur systeme 
                                    $message = 'Problème lors de l\'upload !';
                                } 
                            } 
                            else { 
                            $message = 'Une erreur interne a empêché l\'uplaod de l\'image';
                            } 
                        }
                    }  
                    else { 
                        // Sinon erreur sur les dimensions et taille de l'image 
                        $message = 'Erreur dans les dimensions de l\'image !'; 
                    } 
                } 
                else { 
                    // Sinon erreur sur le type de l'image 
                    $message = 'Le fichier à uploader n\'est pas une image !'; 
                } 
            } 
            else { 
                var_dump($_FILES);
                // Sinon on affiche une erreur pour l'extension 
                $message = 'La validation est incorrecte !';
            } 
            }
        else { 
        // Sinon on affiche une erreur pour le champ vide 
            $message = 'Veuillez remplir le formulaire svp !'; 
        }
    ?>

  2. #2
    Membre confirmé
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2010
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Août 2010
    Messages : 216
    Par défaut
    Salut Truncks,

    Voici comment je procède sur mon site :

    Extrait du formulaire :
    (image 5Mo max)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <input type="hidden" name="MAX_FILE_SIZE" value="5242880" />
    <input type="file" name="userfile">
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    include("./includes/inc_redimimageFunctions.php");
     
    // transfert de fichier vers le serveur
    		$uploaddir = $_SERVER['DOCUMENT_ROOT']."/images/";
    		move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name']);
    		$nFile = $_FILES['userfile']['name'];
     
    		// redimensionner les images
    		$redimPHOTOOK100 = fctredimimage(100,0,'','100_'.$nFile,$uploaddir,$nFile);
    		if ($redimPHOTOOK100 == 1) {
    			$img100 = '100_'.$nFile;
    		} else {
    			$img100 = $nFile;
    		}
     
    		$redimPHOTOOK150 = fctredimimage(150,0,'','150_'.$nFile,$uploaddir,$nFile);
    		if ($redimPHOTOOK150 == 1) {
    			$img150 = '150_'.$nFile;
    		} else {
    			$img150 = $nFile;
    		}
    inc_redimimageFunctions.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
     
    <?
    // 	---------------------------------------------------------------
    // fonction de REDIMENSIONNEMENT physique "PROPORTIONNEL" et Enregistrement
    // 	---------------------------------------------------------------
    // retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false)
    // 	---------------------------------------------------------------
    // La FONCTION : fctredimimage ($W_max, $H_max, $rep_Dst, $img_Dst, $rep_Src, $img_Src)
    // Les parametres :
    // - $W_max : LARGEUR maxi finale --> ou 0
    // - $H_max : HAUTEUR maxi finale --> ou 0
    // - $rep_Dst : repertoire de l image de Destination (deprotégé) --> ou '' (meme repertoire)
    // - $img_Dst : NOM de l image de Destination --> ou '' (meme nom que l image Source)
    // - $rep_Src : repertoire de l image Source (deprotégé)
    // - $img_Src : NOM de l image Source
    // 	---------------------------------------------------------------
    // 3 options :
    // A- si $W_max != 0 et $H_max != 0 : a LARGEUR maxi ET HAUTEUR maxi fixes
    // B- si $H_max != 0 et $W_max == 0 : image finale a HAUTEUR maxi fixe (largeur auto)
    // C- si $W_max == 0 et $H_max != 0 : image finale a LARGEUR maxi fixe (hauteur auto)
    // Si l'image Source est plus petite que les dimensions indiquees : PAS de redimensionnement.
    // 	---------------------------------------------------------------
    // $rep_Dst : il faut s'assurer que les droits en écriture ont été donnés au dossier (chmod)
    // - si $rep_Dst = ''   : $rep_Dst = $rep_Src (meme repertoire que l image Source)
    // - si $img_Dst = '' : $img_Dst = $img_Src (meme nom que l image Source)
    // - si $rep_Dst='' ET $img_Dst='' : on ecrase (remplace) l image source !
    // 	---------------------------------------------------------------
    // NB : $img_Dst et $img_Src doivent avoir la meme extension (meme type mime) !
    // Extensions acceptees (traitees ici) : .jpg , .jpeg , .png
    // Pour ajouter d autres extensions : voir la bibliotheque GD ou ImageMagick
    // (GD) NE fonctionne PAS avec les GIF ANIMES ou a fond transparent !
    // 	---------------------------------------------------------------
    // UTILISATION (exemple) :
    // $redimOK = fctredimimage(120,80,'reppicto/','monpicto.jpg','repimage/','monimage.jpg');
    // if ($redimOK == 1) { echo 'Redimensionnement OK !';  }
    // 	---------------------------------------------------------------
    function fctredimimage($W_max, $H_max, $rep_Dst, $img_Dst, $rep_Src, $img_Src) {
     // ------------------------------------------------------------------
     $condition = 0;
     // Si certains parametres ont pour valeur '' :
       if ($rep_Dst == '') { $rep_Dst = $rep_Src; } // (meme repertoire)
       if ($img_Dst == '') { $img_Dst = $img_Src; } // (meme nom)
     // ------------------------------------------------------------------
     // si le fichier existe dans le répertoire, on continue...
     if (file_exists($rep_Src.$img_Src) && ($W_max!=0 || $H_max!=0)) { 
       // ----------------------------------------------------------------
       // extensions acceptees : 
       $ExtfichierOK = '" jpg jpeg png"'; // (l espace avant jpg est important)
       // extension fichier Source
       $tabimage = explode('.',$img_Src);
       $extension = $tabimage[sizeof($tabimage)-1]; // dernier element
       $extension = strtolower($extension); // on met en minuscule
       // ----------------------------------------------------------------
       // extension OK ? on continue ...
       if (strpos($ExtfichierOK,$extension) != '') {
          // -------------------------------------------------------------
          // recuperation des dimensions de l image Src
          $img_size = getimagesize($rep_Src.$img_Src);
          $W_Src = $img_size[0]; // largeur
          $H_Src = $img_size[1]; // hauteur
          // -------------------------------------------------------------
          // condition de redimensionnement et dimensions de l image finale
          // -------------------------------------------------------------
          // A- LARGEUR ET HAUTEUR maxi fixes
          if ($W_max != 0 && $H_max != 0) {
             $ratiox = $W_Src / $W_max; // ratio en largeur
             $ratioy = $H_Src / $H_max; // ratio en hauteur
             $ratio = max($ratiox,$ratioy); // le plus grand
             $W = $W_Src/$ratio;
             $H = $H_Src/$ratio;   
             $condition = ($W_Src>$W) || ($W_Src>$H); // 1 si vrai (true)
          }      // -------------------------------------------------------------
          // B- HAUTEUR maxi fixe
          if ($W_max == 0 && $H_max != 0) {
             $H = $H_max;
             $W = $H * ($W_Src / $H_Src);
             $condition = $H_Src > $H_max; // 1 si vrai (true)
          }
          // -------------------------------------------------------------
          // C- LARGEUR maxi fixe
          if ($W_max != 0 && $H_max == 0) {
             $W = $W_max;
             $H = $W * ($H_Src / $W_Src);         
             $condition = $W_Src > $W_max; // 1 si vrai (true)
          }
          // -------------------------------------------------------------
          // on REDIMENSIONNE si la condition est vraie
          // -------------------------------------------------------------
          // Par defaut : 
    	  // Si l'image Source est plus petite que les dimensions indiquees :
    	  // PAS de redimensionnement.
    	  // Mais on peut "forcer" le redimensionnement en ajoutant ici :
    	  // $condition = 1;
          if ($condition == 1) {
             // ----------------------------------------------------------
             // creation de la ressource-image "Src" en fonction de l extension
             switch($extension) {
             case 'jpg':
             case 'jpeg':
               $Ress_Src = imagecreatefromjpeg($rep_Src.$img_Src);
               break;
             case 'png':
               $Ress_Src = imagecreatefrompng($rep_Src.$img_Src);
               break;
             }
             // ----------------------------------------------------------
             // creation d une ressource-image "Dst" aux dimensions finales
             // fond noir (par defaut)
             switch($extension) {
             case 'jpg':
             case 'jpeg':
               $Ress_Dst = imagecreatetruecolor($W,$H);
               break;
             case 'png':
               $Ress_Dst = imagecreatetruecolor($W,$H);
               // fond transparent (pour les png avec transparence)
               imagesavealpha($Ress_Dst, true);
               $trans_color = imagecolorallocatealpha($Ress_Dst, 0, 0, 0, 127);
               imagefill($Ress_Dst, 0, 0, $trans_color);
               break;
             }
             // ----------------------------------------------------------
             // REDIMENSIONNEMENT (copie, redimensionne, re-echantillonne)
             imagecopyresampled($Ress_Dst, $Ress_Src, 0, 0, 0, 0, $W, $H, $W_Src, $H_Src); 
             // ----------------------------------------------------------
             // ENREGISTREMENT dans le repertoire (avec la fonction appropriee)
             switch ($extension) { 
             case 'jpg':
             case 'jpeg':
               imagejpeg ($Ress_Dst, $rep_Dst.$img_Dst);
               break;
             case 'png':
               imagepng ($Ress_Dst, $rep_Dst.$img_Dst);
               break;
             }
             // ----------------------------------------------------------
             // liberation des ressources-image
             imagedestroy ($Ress_Src);
             imagedestroy ($Ress_Dst);
          }
          // -------------------------------------------------------------
       }
     }
    // 	---------------------------------------------------------------
     // si le fichier a bien ete cree
     if ($condition == 1 && file_exists($rep_Dst.$img_Dst)) { return true; }
     else { return false; }
    }
    // retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false)
    // 	---------------------------------------------------------------
    ?>
    J'espère t'aider un peu.

    Aurélien

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2010
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Août 2010
    Messages : 216
    Par défaut
    Complément de réponse :

    dans mon code l'original est envoyé dans le dossier image ainsi que les images redimentionnées.

    Si l'image à redim est plus petite que la taille souhaitée, on utilise l'image d'origine.

    En suite me concernant j'enregistre le nom des images dans ma base de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // insertion de la nouvelle soirée dans la base de donnée 
    		$sqlQuery =
    			" INSERT INTO `TRUC` ( `IMAGE` , `IMAGE_100` , `IMAGE_150`)" .
    			" VALUES ('$nFile', '$img100', '$img150' ) ";
    		mysql_query($sqlQuery);
    		checkSqlError($sqlQuery);
    Aurélien

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par AurelienNF Voir le message
    Voici comment je procède sur mon site :
    [...]
    inc_redimimageFunctions.php :
    [...]
    Bien vu !
    Je vois que tu utilises mes Fonctions de redimensionnement d'images

    Pour la gestion d'erreur et l'upload/enregistrment de la photo + miniature :
    -> Système de Gestion-Affichage de Nouvelles (voir dans l'archive)

  5. #5
    Membre confirmé
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2010
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Août 2010
    Messages : 216
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bien vu !
    Je vois que tu utilises mes Fonctions de redimensionnement d'images
    Et oui. Et merci au passage ! Ton code m'a grandement aidé pour la gestion de mes images

    Aurélien

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 109
    Par défaut
    Merci pour cette réponse, je vais regarder attentivement ton exemple.

    J'aurais juste besoin d'un dernier conseil.

    Sachant que lorsque je crée une catégorie ( avec une interface admin ), il se crée automatiquement deux dossier du même nom que cette catégorie ( un pour les images normales et un pour les minis ) et que mon but final sera pendant l'upload, de rediriger les images dans les dossiers de la catégorie correspondante ( ouf ), que me conseillez vous de faire pour sauvegarder le chemin de l'image ?

    L'url en entier ?
    Une combinaison du genre $categorie/$nom_image.extention

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 109
    Par défaut
    Re-bonjour,

    Tout d'abord, merci pour ce superbe exemple qui m'a bien aidé.

    J'ai un dernier petit soucis, c'est pour l’insertion du nom dans la bdd.

    Quand je fais cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        $sq="insert into images values('',\"$titre_image\",\"$titre_image2\",\"$texte_image\",\"$texte_image2\",\"$nFile\")"; 
        $quer=mysql_query($sq ) or die('erreur sq: '.mysql_error());
    Il m'enregistre un 0 dans le champ correspondant et un 150 si je prend l'image redimensionnée

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    mon conseil est d'optimiser les données pour enregistrer le moins de "caractères" en base de données (pour ne pas l'alourdir inutilement).

    La façon de s'y prendre dépend de choix et de préférences personnelles.

    Je prends un exemple personnel (simplifié) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    A/ une table ART_ARTICLE
    id_article	(id de l article, auto-incrément)
    id_categorie
    photo_art	(nom de la photo liée à l article)
     
    B/ une table ART_CATEGORIE
    id_categorie	(id de la catégorie, auto-incrément)
    nom_cat
    url_cat		(dossier de la catégorie)
    On suppose (comme dans ton cas) que :
    1/ quand on crée une categorie :
    -> on crée 1 dossier nommée : "id_cat-nom_cat" (id_cat rend le nom du dossier unique), par ex. 23-film-comique, 24-film-de-guerre,...
    -> dans ce dossier, on crée 2 dossiers : "rep-photos" et "rep-pictos"

    2/ quand on upload une image (à joindre à l'article) :
    -> on a d'abord choisi la catégorie (ex. via une liste déroulante dans le formulaire) :
    => donc, on récupère l'id_categorie (ex. : 23). A partir de cet id, on connait le nom du dossier de destination (ex. : "23-film-comique")
    -> la photo et le picto auront le même nom : id_article-photo_art (ex. : 1563-la-grande-vadrouille.jpg)
    -> on enregistre (physiquement) la photo originale dans le dossier : "23-film-comique/rep-photos"
    -> après redimensionnement, on enregistre (physiquement) le picto dans le dossier : "23-film-comique/rep-pictos"

    => en base de données (table ART_ARTICLE), on enregistre UNIQUEMENT :
    id_categorie = '23'
    photo_art = '1563-la-grande-vadrouille.jpg'

    Soit un minimum d'infos enregistrées en base de données.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/10/2005, 09h33
  2. [Upload] Probleme upload images
    Par yveslens dans le forum Langage
    Réponses: 6
    Dernier message: 22/08/2005, 09h42
  3. [images miniatures]
    Par jean-jacques varvenne dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 19/08/2005, 20h33
  4. Réponses: 2
    Dernier message: 04/08/2005, 11h32
  5. [ImageMagick] Images miniatures
    Par oli2a dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 08/11/2004, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo