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 :

[Système] Redimensionner une image ?


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut [Système] Redimensionner une image ?
    Bonjour
    Voici mon script qui transforme mes images couleurs en noirs et blanc, qui marche tres bien, mais je bataille car je n'arrive pas au début à faire un :
    si l'image originale fait plus de 567 pixels de large ou plus de 794px de hauteur, alors la redimensionner avant de la traiter et de la convertir en noir et blanc.
    Un petit coup de pouce pour mon if ?
    Merci !

    <?

    $Submit = $_POST['Submit'];

    if ( $Submit ) {

    // Temporary upload image name
    $original_image = $_FILES['filename']['tmp_name'];
    list($width, $height, $type, $attr) = getimagesize($original_image);

    // Get the image dimensions
    $size=GetImageSize( $original_image );
    // Name to save the image as - in this case the same as the original
    $new_image = $_FILES['filename']['name'];

    exec("/usr/local/bin/convert $original_image -segment 1x1 +dither -colors 2 -edge 1 -normalize -negate $new_image");

    echo "<center><img src=\"".$new_image."\"><br><a href=\"http://www.test.com\" target=\"_blank\">test</a></center>";

    }
    ?>

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Par défaut affichage
    Et euh... ça te conviendrait si l'image était seulement affichée avec les bonnes dimensions ?

  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    J'imagine que tu cherches quelque chose comme ceci :

    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
    <?php
     
    define('CFG_CHARSET',     'ISO-8859-1');
    define('CFG_QUOTE_STYLE', ENT_QUOTES);
     
    define('CFG_MAX_WIDTH',  567);
    define('CFG_MAX_HEIGHT', 794);
     
    if(!empty($_POST['Sumit']))
    {
        // Temporary upload image name
        $original_image = $_FILES['filename']['tmp_name'];
        list($width, $height, $type, $attr) = getimagesize($original_image);
     
        // Get the image dimensions
        $size = GetImageSize($original_image); // Inutile
     
        // Name to save the image as - in this case the same as the original
        $new_image = $_FILES['filename']['name'];
     
        if($width > CFG_MAX_WIDTH or $height > CFG_MAX_HEIGHT)
        {
            // redimensionner l'image ici
        }
     
        exec('/usr/local/bin/convert '.escapeshellcmd($original_image)
            .' -segment 1x1 +dither -colors 2 -edge 1 -normalize -negate '
            .escapeshellarg($new_image));
     
        echo '<center><img src="'.htmlentities($new_image, CFG_QUOTE_STYLE, CFG_CHARSET).'">'
            .'<br /><a href="http://www.test.com" target="_blank">test</a></center>';
    }
     
    ?>
    J'ai un peu reformulé ton code selon mes habitudes de programmation. Les lignes 10 et 13 de cet extrait sont redondantes. Cjoisis l'une ou l'autre mais ne conserve pas les deux.
    Attention, ton code est vulnérable à une injection de commande système, la pire des attaques qu'il soit possible de subir. Observe comment j'ai modifié ta commande exec()...
    Ton code ouvre également une faille XSS : j'ai utilisé htmlentities pour t'en protéger.
    Enfin, ton if() était mal écrit : si le script est appelé sans que le formulaire soit soumis, cela affiche un warning.

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut merci
    Oulala un grand merci à toi Yogui

    Je vais chercher comment redimmensionner, parce que actuellement, quand les gens uploadent une grosse image, ca met un temps fou a etre calculé !

    J'avais trouvé ce code
    // Max height and width
    $max_width = 100;
    $max_height = 100;

    // Path to your jpeg

    $upfile '/path/to/file.jpg';
    Header("Content-type: image/jpeg");

    $size = GetImageSize($upfile); // Read the size
    $width = $size[0];
    $height = $size[1];

    // Proportionally resize the image to the
    // max sizes specified above

    $x_ratio = $max_width / $width;
    $y_ratio = $max_height / $height;

    if( ($width <= $max_width) && ($height <= $max_height) )
    {
    $tn_width = $width;
    $tn_height = $height;
    }
    elseif (($x_ratio * $height) < $max_height)
    {
    $tn_height = ceil($x_ratio * $height);
    $tn_width = $max_width;
    }
    else
    {
    $tn_width = ceil($y_ratio * $width);
    $tn_height = $max_height;
    }
    // Increase memory limit to support larger files

    ini_set('memory_limit', '32M');

    // Create the new image!
    $src = ImageCreateFromJpeg($upfile);
    $dst = ImageCreateTrueColor($tn_width, $tn_height);
    ImageCopyResized($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height, $width, $height);
    ImageJpeg($dst);
    Pour mettre dans mon if, mais je l'ai esséy dans tout les sens et je ne vois pas comment cumuler le ImageJpeg($dst); (que je ne dois pas faire) et le

    exec('/usr/local/bin/convert '.escapeshellcmd($original_image)
    .' -segment 1x1 +dither -colors 2 -edge 1 -normalize -negate '
    .escapeshellarg($new_image));

    Merci pour tout et encore merci !!

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Si l'image est grosse, ce n'est pas le temps de traitement (redimensionnement) qui est long mais tout simplement l'envoi (upload) de l'image !
    Cela, tu n'y peux rien.

    Pense à te renseigner pleinement avant d'utiliser header(), sans quoi tu auras des surprises :
    http://www.developpez.net/forums/sho...92#post1240792

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut
    Merci pour ces précieuses informations.
    Que me conseilles tu alors ? D'interdire les envoi supérieurs à x mégas ?
    Pour la fonction header je l'ai finalement enlevée pour mon script de labyrinthe.
    Merci beaucoup
    Isa

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Évidemment : c'est toujours ce qu'il faut faire lorsqu'il s'agit de fichiers.
    Je te propose de te reporter à mon tutoriel : http://g-rossolini.developpez.com/tu...aires-et-php5/ et plus particulièement la partie sur les envois mixtes (multipart).

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut
    J'ai essaye de rajouter la gestion pour 200ko maxi mais je ny arrive pas, on dira qu'il n'en tient pas compte :

    J'ai mis dans le formulaire
    <input type="hidden" name="MAX_FILE_SIZE" value="204800">

    et dans le code

    $max_size = 200*1024;

    if ($_FILES['doc']['size'] > $max_size) {
    $erreur = 'Fichier trop volumineux '.$max_size.' Ko maximun !';
    echo "$erreur";
    }

    A quoi sert ce hidden dans le form ? Pourquoi faut il le mettre ?

    Puis je faire dans mon script un imagedestroy ?

    Merci

  9. #9
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Certains navigateurs ne tiennent pas compte du max_size dans le formulaire. Tu peux utiliser JavaScript pour effectuer le contrôle, cependant.
    En quoi devrais-je savoir mieux que toi si tu dois détruire ton image ? Tout dépend de ton utilisation...

Discussions similaires

  1. [VB.NET] Redimensionner une image dans un PictureBox
    Par Monster77 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 05/04/2007, 18h24
  2. [32 bits] Redimensionner une image JPEG/GIF/PNG...
    Par CR_Gio dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 04/10/2005, 00h57
  3. Redimensionner une image...
    Par RhaZieL dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 22/07/2005, 09h30
  4. [VB.NET] Redimensionner une image proportionnelement
    Par Monster77 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/10/2004, 12h10
  5. [MX2004] redimensionner une image lors du chargement
    Par ouinouin dans le forum Flash
    Réponses: 8
    Dernier message: 18/02/2004, 18h32

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