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 :

Poids d'une image passée en URL


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 96
    Points
    96
    Par défaut Poids d'une image passée en URL
    Bonjour,

    Pour des avatars, je redimensionnes automatiquement des images uploader sur le serveur.

    Cependant, je souhaite l'imiter la taille des image fournit par url. Jusqu'ici, j'utilise le classique getimagesize(). Hors le poids d'un image passer en url peut-être énorme, et comme getimagesize() charge toute l'image avant de retourner quoi que ce soit, et bien parfois c'est lent

    Donc je voudrais fixer une limite a 30k par exemple pour l'image passer un url.

    Il a t-il un moyen de vérifier le poids d'une image passer en url, sans devoir la charger complètement ? est-ce que les informations d'un get_headers($_POST['url']), s'obtiennent une fois la page complètement charger ? donc l'image aussi ?

    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
     
     
    redimage($_POST['url'],"../upload/avatarPasOk/".$nom,140,140, $typeText)
     
    function redimage($img_src,$img_dest,$dst_w,$dst_h,$ext) {
       // Lit les dimensions de l'image
       $size = GetImageSize($img_src);  
       $src_w = $size[0]; 
       $src_h = $size[1];
     
       $fonctionName = "ImageCreateFrom".$ext;
       // 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;
     
       // Crée une image vierge aux bonnes dimensions
       $dst_im = ImageCreateTrueColor($dst_w,$dst_h); 
       // Copie dedans l'image initiale redimensionnée
       $src_im = $fonctionName($img_src);
     
       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);
     
     
    }

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    Cela doit être possible avec une requête HTTP HEAD qui te retournera notamment un Content-Size de l'image distante.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 96
    Points
    96
    Par défaut
    J'ai tester le get_headers($_POST['url'],1), et ça fonctionne très bien pour faire les vérifications.

    [0] => HTTP/1.1 200 OK //nous informes si le fichier est disponible sur internet
    [Content-Type] => image/jpeg //le type de fichier
    [Content-Length] => 438 //le poids (taille en octets)

    Par contre, pour les informations de dimension (hauteur et largeur), je n'est pas encore trouver sans comment les obtenir sans devoir charger l'image.

    J'aimerais donc connaitre les dimensions de l'image, si elle sont plus petite que les dimensions maximums, alors ne pas redimensionner l'image.

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    Par contre, pour les informations de dimension (hauteur et largeur), je n'est pas encore trouver sans comment les obtenir sans devoir charger l'image.
    Faudrait lire les premiers octets du fichier image (les en-têtes) et décoder ceux indiquant les dimensions.
    Bon courage

  5. #5
    Invité
    Invité(e)
    Par défaut
    Pour info : FONCTIONS de redimensionnement d'images
    http://j-reaux.developpez.com/tutori...sionner-image/

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 96
    Points
    96
    Par défaut
    Oui, merci pour le lien.
    En effet, je penses pas avoir trop le choix de charger l'image avec getimagesize(), pour trouver les dimensions de celle-ci.

    Merci quand même

  7. #7
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    Ben si, en récupérent uniquement les en-têtes de l'image. Par contre faut connaître les spécs de chaque format.

  8. #8
    FoxLeRenard
    Invité(e)
    Par défaut
    Je rêve ou j'ais lus que La fonction getimagesize()
    chargeait l'image en temporaire

    Non Non cette fonction va extraire dans l'entête des fichiers les quatre/cinq infos dont elle a besoins taille poid type mine ...

    du reste cette fonction ne requiert pas la bibliothèque GD.

    Faites le test depuis votre site web vers votre micro,avec un TIF de 15Mo !!

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 96
    Points
    96
    Par défaut
    Bonjour,

    Bien pour moi, c'est assez lent obtenir les infos des fichiers passer en url.

    Exemple : taille du fichier passer en url : 3184.46 Ko (3260891 octets)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       $start = time();
       echo "Debut : ".$start."<br>";
       $size = GetImageSize($img_src);  
       $src_w = $size[0]; 
       $src_h = $size[1];
        $duree = time()-$start;
        echo "Duree: ".$duree."<br>";
    Debut : 1239178383
    Durée : 11

    donc 11 seconde pour une image de 3000 ko, pour que ça soit aussi long, faut qu'il se passe un truc

  10. #10
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par Sylvain245 Voir le message
    Bonjour,
    Bien pour moi, c'est assez lent obtenir les infos des fichiers passer en url.
    Oui je me suis fié a la doc du site PHP
    Et j'avais fait un test, mais je n'avais pas été assez loin,
    aprés test dans tous les sens, force est de constater que la fonction ne raméne son résultat qu'aprés téléchargement dans le temporaire.

    Mais j'ais noté un truc illogique ...
    J'ais fait un html (ou un php) qui appel le PHP qui va traiter l'info ...
    premier fichier 01.php qui va donc appeler 02.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <html><body>
    <form method="POST" action="02.php" ENCTYPE="multipart/form-data">
              <INPUT type=hidden name=MAX_FILE_SIZE  VALUE=70000>
              <INPUT type=file name="XXX">
              <INPUT type=submit value="Envoyer">
    </form>
    </body></html>

    Et a la reception 02.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    <?php
    $taille = getimagesize($_FILES['xxx'][tmp_name]);
    echo $taille[1]."<br />"; 
    echo $taille[0]."<br />"; 
     
    ?>
    La chose curieuse est que lorsque je mets dans le HTML

    INPUT type=hidden name=MAX_FILE_SIZE VALUE=70

    si l' image est trés grosse, ça prends le même temps pour me donner aucun résultat, puisque j'avais mis 70 ...

    avec
    INPUT type=hidden name=MAX_FILE_SIZE VALUE=70000000

    La j'ai bien les infos, mais le temps est le même ....

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2002
    Messages : 151
    Points : 96
    Points
    96
    Par défaut
    Wep,

    Par ailleurs le champ MAX_FILE_SIZE est une indication de la taille maximum du fichier à uploader pour le navigateur, mais celà n'est pas suffisant pour s'assurer que les fichiers uploadés ne dépasseront pas une certaine taille dans la mesure où tous les navigateurs ne prennent pas systématiquement en compte cette valeur. La valeur de la taille maximale du fichier uplodé est ajustable "en dûr" dans le fichier de configuration php.ini.
    Pour ma part avec mozilla, l'erreur supposé être générer par le Max_File_Size se déclenche pas.

    Pour le poids d'un fichier via post, j'utilise ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if ($_FILES['fichier'][size]<=30720)
    {
       echo "<br>Poids de l'image Ok <br> FIN DES TESTS DE VÉRIFICATION";
    }
    else
    {
      $erreur = "oui";
      $_SESSION['msgErreurInscription'] .= "Le poids de l'image (taille en ko), excède les 30ko permis.<br>";
      $_SESSION['avatar'] = "erreur";	   
    }
    comme ça c'est toujours très rapide, peut importe la taille de l'image.
    et pour les images ou fichier en url

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    get_headers($_POST['url'],1)
    seulement, le header retourne le type, poids, etc... mais pas les dimensions... bref pour j'ai pas encore réussi à trouver comment faire pour les obtenir sans devoir charger l'image.

    Cela dit, si on affiche une image dans le navigateur, dans les infos de l'images ont peut voir les dimensions avant le chargement complet de l'image... juste que j'ai pas encore trouver comment récupérer ces info...

    y a exif, pour les jpeg et tiff, mais pour les gifs et png...

Discussions similaires

  1. [XSLT 1.0] URL d'une image passé en paramètre dans XSL
    Par Mygush dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 29/03/2011, 17h37
  2. Detecter le poids d'une image avec l'objet DOM
    Par crimsonPhantom dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/07/2006, 16h54
  3. Poids d'une image a partir d'une url
    Par matique dans le forum Langage
    Réponses: 4
    Dernier message: 11/02/2006, 20h41
  4. Tester si une variable passé en url existe
    Par ran_hery dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 02/08/2005, 14h06

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