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 :

Redimensionnement d'une image


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut Redimensionnement d'une image
    Bonjour à tous,

    J'upload des images en vérifiant le type et la taille des fichiers uploadés.

    Je voudrais maintenant redimensionner les photos et les mettre dans un autre dossier.

    J'utilise pour cela un tuto trouvé sur dvp.com :

    ftp://ftp-developpez.com/j-reaux/tut...nner-image.pdf

    J'ai donc cette fonction (où j'ai corrigé un peu le code) :

    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
     
    <?php
    // -----------------------------------------------------------------------------------------------------
    // fonction de REDIMENSIONNEMENT physique "NON-PROPORTIONNEL" et Enregistrement
    // -----------------------------------------------------------------------------------------------------
    // retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false)
    // -----------------------------------------------------------------------------------------------------
    // La FONCTION : fctdeformimage ($W_fin, $H_fin, $rep_Dst, $img_Dst, $rep_Src, $img_Src)
    // Les parametres :
    // - $W_fin : LARGEUR finale --> ou 0
    // - $H_fin : HAUTEUR 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_fin != 0 et $H_fin != 0 : image finale a LARGEUR ET HAUTEUR fixes
    // B- si $H_fin != 0 et $W_fin == 0 : image finale a HAUTEUR fixe (largeur auto)
    // C- si $W_fin == 0 et $H_fin != 0 : image finale a LARGEUR fixe (hauteur auto)
    // Dans TOUS les cas : redimensionnement non-proportionnel
    // -----------------------------------------------------------------------------------------------------
    // $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) :
    // $deformOK = fctredimimage(120,80,'reppicto/','monpicto.jpg','repimage/','monimage.jpg');
    // if ($deformOK == 1) { echo 'Redimensionnement OK !'; }
    // -----------------------------------------------------------------------------------------------------
    function fctdeformimage($W_fin, $H_fin, $rep_Dst, $img_Dst, $rep_Src, $img_Src) {
    // ------------------------------------------------------------------
    // 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_fin!=0 || $H_fin!=0)) {
    // ----------------------------------------------------------------
    // extensions acceptees :
    $ExtfichierOK = '" jpg jpeg png JPEG"'; // (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
    // Dans TOUS les cas : redimensionnement non-proportionnel
    // -------------------------------------------------------------
    // A- LARGEUR ET HAUTEUR fixes
    if ($W_fin != 0 && $H_fin != 0) {
    $W = $W_Src;
    $H = $H_Src;
    }
    // -------------------------------------------------------------
    // B- HAUTEUR fixe
    if ($W_fin == 0 && $H_fin != 0) {
    $W = $W_Src;
    $H = $H_fin;
    }
    // -------------------------------------------------------------
    // C- LARGEUR fixe
    if ($W_fin != 0 && $H_fin == 0) {
    $W = $W_fin;
    $H = $H_Src;
    }
    // -------------------------------------------------------------
    // REDIMENSIONNEMENT
    // ----------------------------------------------------------
    // creation de la ressource-image "Src" en fonction de l extension
    switch($extension) {
    case 'jpg':
    case 'JPEG':
    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':
    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':
    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 (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)
    // -----------------------------------------------------------------------------------------------------
    ?>
    Je devrais obtenir "Redimensionnement OK !" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($deformOK == 1) { echo 'Redimensionnement OK !'; }
    mais je n'obtiens rien (aucun message d'erreur).

    Voyez-vous ce qui ne pourrait pas fonctionner ?

    Merci d'avance

    beegees

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par beegees Voir le message
    Bonjour à tous,
    J'upload des images en vérifiant le type et la taille des fichiers uploadés.
    Je voudrais maintenant redimensionner les photos et les mettre dans un autre dossier.
    Oui mais tu pourrais aussi faire le redimensionnement en même temps que l'upload. Cela ne serait-il pas plus simple ?

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2009
    Messages : 126
    Points : 183
    Points
    183
    Par défaut
    Es-tu certain que la taille du fichier uploadé ne dépasse pas la valeur de MAX_FILE_SIZE ?

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par matlow Voir le message
    Es-tu certain que la taille du fichier uploadé ne dépasse pas la valeur de MAX_FILE_SIZE ?
    Heu... y'a pas de fonction d'upload dans son code

    Cela dit il pourrait se heurter à la mémoire limite max utilisable pour son script.

    @beegees à la fin de ton code le temps de débugguer écris plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (file_exists($rep_Dst.$img_Dst)) { echo 'fichier créé'; }
    else { echo 'fichier non créé'; }
    Si tu n'a rien d'écrit c'est que tu as dépassé le memory limit, donc tes images sont grosses pour pouvoir être redimensionnées. Soit tu utilise des images plus petites, soit tu augmente le memory_limit (mais c'est impossible sur un mutualisé).Tu peux aussi gérer l'erreur de dépassement du memory_limit pour au moins éviter la page blanche et avoir un message approprié.

    Sinon ma première question reste d'actualité. Souhaites tu faire un redimensionnement séparé ou ne serait-il pas plus simple de le faire lors de l'upload ?

  5. #5
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Salut à vous,

    Merci pour vos réponses.

    Citation Envoyé par ABCIWEB Voir le message
    Heu... y'a pas de fonction d'upload dans son code
    Si, j'ai du code d'upload qui fonctionne parfaitement, mais que je ne vous ai peut-être pas montré.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cela dit il pourrait se heurter à la mémoire limite max utilisable pour son script.
    Non, pas du tout.

    @beegees à la fin de ton code le temps de débugguer écris plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (file_exists($rep_Dst.$img_Dst)) { echo 'fichier créé'; }
    else { echo 'fichier non créé'; }
    OK

    Si tu n'a rien d'écrit c'est que tu as dépassé le memory limit, donc tes images sont grosses pour pouvoir être redimensionnées. Soit tu utilise des images plus petites, soit tu augmente le memory_limit (mais c'est impossible sur un mutualisé).
    J'ai en effet augmenté la limite à 20 mb dans php.ini

    Sinon ma première question reste d'actualité. Souhaites tu faire un redimensionnement séparé ou ne serait-il pas plus simple de le faire lors de l'upload ?
    As-tu une astuce pour redimensionner directement lors de l'upload ? Je suis alors preneur.

    Important :

    En relisant la documentation du tuto, je me suis aperçu qu'il fallait installer GD, la bibliothèque image de PHP (chose que je n'avais pas encore fait).

    Merci pour le suivi.

    beegees

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par beegees Voir le message
    As-tu une astuce pour redimensionner directement lors de l'upload ? Je suis alors preneur.
    Oui cette classe sait faire cela en sauvegardant ou non le fichier initial, un ou plusieurs redimensionnements par image sont possibles avec en plus la gestion des erreurs (entre autre dépassement de memory_limit, post_max_size et upload_max_filesize).

  7. #7
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Oui la classe en pj sait faire cela en sauvegardant ou non le fichier initial, un ou plusieurs redimensionnements par image sont possibles avec en plus la gestion des erreurs (entre autre dépassement de memory_limit, post_max_size et upload_max_filesize).
    Merci à toi.

    Est-ce que je peux utiliser uniquement la partie redimensionnement de la classe ?

    J'ai déjà le code de l'upload, du check de l'extension et de la taille.

    Merci encore à toi pour ton aide.

    beegees

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par beegees Voir le message
    Est-ce que je peux utiliser uniquement la partie redimensionnement de la classe ?
    Non ce serait beaucoup trop compliqué alors que la classe est faite pour être utilisée de manière simple en quelques lignes.
    Par exemple :
    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
    <?php require('class_upload.php');// chargement de la classe
     
    $up = new Telechargement('PHOTO','form1','phot');// téléchargement dans le répertoire "PHOTO", témoin d'envoi du formulaire : "form1", nom du champ d'upload du formulaire : "phot"
     
    $extensions = array('jpg','jpeg');
    $up->Set_Extensions_accepte ($extensions); // envoi le tableau des extensions acceptées
     
    $up->Set_Redim ('200','150');// redimensionne en maximum 200 de largeur et maximum 150 de hauteur
     
    $up->Upload('reload');// envoi des commandes, réalise l'upload et recharge la page avec l'option "reload" en paramètre.
    ?>
    <form enctype = "multipart/form-data" action = "#" method = "post">      
    <input name = "phot" type = "file" size = "70" />                                 
    <input type = "submit" name = "form1" value = "Envoyez"  />    
    </form>
    Là il y a déjà tout le code pour faire l'upload et le redimensionnement. On peut guère faire plus simple

    Ensuite si tu veux tu pourrais ajouter facilement des options qui sont inclues sous forme de commandes dans la classe, par exemple :

    - une ligne pour incrémenter le nom de fichier si un fichier de même nom se trouve déjà sur le serveur (ou au choix additionner un suffixe unique).
    - Ou une ligne pour imposer un nom de fichier.
    - Une ligne pour afficher le résultat du téléchargement et gérer les erreurs.
    etc.

Discussions similaires

  1. ASP : redimensionner/compresser une image
    Par laptiote dans le forum ASP
    Réponses: 6
    Dernier message: 23/07/2007, 18h46
  2. Redimensionnement d'une image en même temps que sa JFrame
    Par mandou1 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 22/06/2007, 12h04
  3. Réponses: 2
    Dernier message: 27/11/2006, 15h16
  4. [JDesktopPane] Redimensionner d'une image
    Par GLDavid dans le forum Composants
    Réponses: 17
    Dernier message: 05/07/2006, 11h03
  5. probleme redimensionnement d'une image
    Par meteor4 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 29/11/2004, 14h58

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