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 image qualité médiocre [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut redimensionnement image qualité médiocre
    Bonjour,

    J'utilise cette fonctionne pour redimensionner mes images et plus particulièrement pour générer mes vignettes. Pour une raison inconnue la qualité n'est pas du tout au rendez-vous pourtant je l'ai mise à 100
    Auriez vous une idée ?
    Voici le code de la fonction
    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
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    // --------------------------------------------------------------------------------------------------
    // fonction de REDIMENSIONNEMENT physique "CROP CENTRE" et Enregistrement
    // --------------------------------------------------------------------------------------------------
    // retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false)
    // --------------------------------------------------------------------------------------------------
    // La FONCTION : fct_crop_image($Wfin, $Hfin, $rep_Dst, $img_Dst, $rep_Src, $img_Src)
    // Les parametres :
    // - $Wfin : LARGEUR finale --> ou 0
    // - $Hfin : HAUTEUR finale --> ou 0
    // - $rep_Dst : repertoire de l image de Destination (deprotégé) --> ou ''
    // il faut s'assurer que les droits en écriture ont été donnés au dossier (chmod ou via logiciel FTP)
    // - $img_Dst : NOM de l image de Destination ----> ou ''
    // - $rep_Src : repertoire de l image Source (deprotégé)
    // - $img_Src : NOM de l image Source
    // --------------------------------------------------------------------------------------------------
    // 4 options :
    // A- si $Wfin != 0 et $Hfin != 0 : crop aux dimensions indiquees
    // B- si $Wfin = 0 et $Hfin != 0 : crop en HAUTEUR (meme largeur que la source)
    // C- si $Wfin != 0 et $Hfin = 0 : crop en LARGEUR (meme hauteur que la source)
    // D- si $Wfin = 0 et $Hfin = 0 : (cas special) crop "carre" a la plus petite dimension de l image source
    // --------------------------------------------------------------------------------------------------
    // - si $rep_Dst = ''   : $rep_Dst=$rep_Src (meme repertoire que le repertoire 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 ($img_Src) !
    // --------------------------------------------------------------------------------------------------
    // 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) :
    // $cropOK = fct_crop_image(120,80,'reppicto/','monpicto.jpg','repimage/','monimage.jpg');
    // if ($cropOK == 1) { echo 'Crop centré OK !';  }
    // --------------------------------------------------------------------------------------------------
    function fct_crop_image($Wfin, $Hfin, $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)
       if ($Wfin == '') { $Wfin = 0; }
       if ($Hfin == '') { $Hfin = 0; }
     	// ------------------------------------------------------------------
     	// si le fichier existe dans le répertoire, on continue...
     if (file_exists($rep_Src.$img_Src)) { 
       	// ----------------------------------------------------------------
       	// 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) != '') {
          	// -------------------------------------------------------------
          $condition = 1;
          	// -------------------------------------------------------------
          	// recuperation des dimensions de l image Source
          $size = getimagesize($rep_Src.$img_Src);
          $W_Src = $size[0]; 	// largeur
          $H_Src = $size[1]; 	// hauteur
          	// -------------------------------------------------------------
          	// condition de crop et dimensions de l image finale
          	// -------------------------------------------------------------
          	// A- crop aux dimensions indiquees
          if ($Wfin != 0 && $Hfin != 0) {
             $W = $Wfin;
             $H = $Hfin;
          }
          	// -------------------------------------------------------------
          	// B- crop en HAUTEUR (meme largeur que la source)
          if ($Wfin == 0 && $Hfin != 0) {
             $H = $Hfin;
             $W = $W_Src;
          }
          	// -------------------------------------------------------------
          	// C- crop en LARGEUR (meme hauteur que la source)
          if ($Wfin != 0 && $Hfin == 0) {
             $W = $Wfin;
             $H = $H_Src;         
          }
          	// D- (cas special) crop "carre" a la plus petite dimension de l image source
          if ($Wfin == 0 && $Hfin == 0) {
             if ($W_Src >= $H_Src) {
             $W = $H_Src;
             $H = $H_Src;
             } else {
             $W = $W_Src;
             $H = $W_Src;
             }   
          }
          	// -------------------------------------------------------------
             // 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);
               // fond blanc
               $blanc = imagecolorallocate ($Ress_Dst, 255, 255, 255);
               imagefill ($Ress_Dst, 0, 0, $blanc);
               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;
             }
          	// -------------------------------------------------------------
          	// CENTRAGE du crop
          	// coordonnees du point d origine Scr : $X_Src, $Y_Src
          	// coordonnees du point d origine Dst : $X_Dst, $Y_Dst
          	// dimensions de la portion copiee : $W_copy, $H_copy
          	// -------------------------------------------------------------
          	// CENTRAGE en largeur
          if ($Wfin == 0) {
             if ($Hfin == 0 && $W_Src<$H_Src) {
                $X_Src = 0;
                $X_Dst = 0;
                $W_copy = $W_Src;
             } else {
                $X_Src = 0;
                $X_Dst = ($W - $W_Src) /2;
                $W_copy = $W_Src;
             }
          } else {
             if ($W_Src > $W) {
                $X_Src = ($W_Src - $W) /2;
                $X_Dst = 0;
                $W_copy = $W;
             } else {
                $X_Src = 0;
                $X_Dst = ($W - $W_Src) /2;
                $W_copy = $W_Src;
             }
          }
          	// -------------------------------------------------------------
          	// CENTRAGE en hauteur
          if ($Hfin == 0) {
             if ($Wfin == 0 && $H_Src<$W_Src) {
                $Y_Src = 0;
                $Y_Dst = 0;
                $H_copy = $H_Src;
             } else {
                $Y_Src = 0;
                $Y_Dst = ($H - $H_Src) /2;
                $H_copy = $H_Src;
             }
          } else {
             if ($H_Src > $H) {
                $Y_Src = ($H_Src - $H) /2;
                $Y_Dst = 0;
                $H_copy = $H;
             } else {
                $Y_Src = 0;
                $Y_Dst = ($H - $H_Src) /2;
                $H_copy = $H_Src;
             }
          }
          	// -------------------------------------------------------------
          	// CROP par copie de la portion d image selectionnee
          imagecopyresampled 
                            ($Ress_Dst, $Ress_Src, $X_Dst, $Y_Dst, $X_Src, $Y_Src, $W_copy, $H_copy, $W_copy, $H_copy);
             	// ----------------------------------------------------------
             	// ENREGISTREMENT dans le repertoire (avec la fonction appropriee)
             switch ($extension) { 
             case 'jpg':
             case 'jpeg':
               ImageJpeg ($Ress_Dst, $rep_Dst.$img_Dst,100);
               break;
             case 'png':
               imagepng ($Ress_Dst, $rep_Dst.$img_Dst);
               break;
             }
             	// ----------------------------------------------------------
             	// liberation des ressources-image
             imagedestroy ($Ress_Src);
             imagedestroy ($Ress_Dst);
          }
          	// -------------------------------------------------------------
     }
    // --------------------------------------------------------------------------------------------------
     	// retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false)
     	// si le fichier a bien ete cree
     if ($condition == 1 && file_exists($rep_Dst.$img_Dst)) { return true; }
     else { return false; }
    }
    merci d'avance pour votre aide
    bonne journée
    ludo

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Les fonctions de redimensionnement d''images que j'ai écrites n'ont jamais fait l'objet de telle critique.

    Merci de montrer :
    • comment elle est utilisée (code)
    • un exemple d'image avant/après

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    Bonjour,

    le programmeur je ne savais plus où j'avais récupéré ce bout de code justement c'est tellement vieux.... enchanté du coup je vais rajouter le nom et le site que je n'avais pas dans le head du script du coup

    aucune critique sur le script loin de là je suis sur que j'en suis la cause mais j'essaye de comprendre justement

    utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     if(move_uploaded_file($_FILES['image']['tmp_name'],$site_racine."upload/tmp/{$_FILES['image']['name']}"))
    { 
    	$name_fichier = time().'.jpg';
    	fct_crop_image('840', '', $rep_Dst, $name_fichier, $rep_Src, $_FILES['image']['name']);
    	fct_crop_image('120', '90', $rep_Dst.'vignettes/', $name_fichier, $rep_Src, $_FILES['image']['name']);
    	fct_crop_image('240', '180', $rep_Dst.'vignettes/', 'm'.$name_fichier, $rep_Src, $_FILES['image']['name']);
    unlink ($rep_Src.$_FILES['image']['name']);
    }
    Nom : 1570606362.jpg
Affichages : 99
Taille : 109,3 Ko
    image en 240x180 Nom : m1570606362.jpg
Affichages : 89
Taille : 21,4 Ko

    merci d'avance pour ton aide et en tout cas bravo pour le script qui repond à mes besoins

  4. #4
    Invité
    Invité(e)
    Par défaut
    Que valent $rep_Dst et $rep_Src ?

    Chaque crop doit être effectué sur l'image originale.

    Si tu enchaînes 3 crops sur la même image, normal que la qualité baisse.
    Ex. : "crop" à 240*180 sur une image à 120*90 (en réalité, on agrandit l'image : elle devient floue)

    Sinon, essaie en inversant les 2 lignes.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    voici les valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $rep_Dst = $site_racine."upload/actu/";
    	$rep_Src = $site_racine."upload/tmp/";
    je viens de tester en gardant juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fct_crop_image('240', '180', $rep_Dst.'vignettes/', 'm'.$name_fichier, $rep_Src, $_FILES['image']['name']);
    c'est pareil

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    quel idiot j'avais un vieux reste de fonction creation_vignette() qui taiter l'image avant la tienne ... en supprimant tout est ok
    désolé du dérangement et merci pour ton aide en tout cas

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

Discussions similaires

  1. [CR XI] Impression d'une image de qualité médiocre
    Par juju05 dans le forum Débuter
    Réponses: 0
    Dernier message: 21/03/2013, 11h21
  2. Redimensionner image dans MDI
    Par DEFITOP dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 10/05/2006, 20h02
  3. [ImageMagick] Résultat de qualité médiocre
    Par clemsouz dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 30/03/2006, 11h40
  4. [ImageMagick] Redimensionnement image
    Par FoxLeRenard dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 27/02/2006, 16h53
  5. [MFC - GDI] Redimensionnement Image
    Par Ben A. dans le forum MFC
    Réponses: 3
    Dernier message: 02/02/2006, 11h54

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