script redimension très lent

bobi
Invité n'ayant pas de compte PHPfrance

30 déc. 2006, 13:32

Bonjour,

J'utilise cette fonction :
function redimage($img_src,$dst_w,$dst_h) {
   // Lit les dimensions de l'image
   $size = GetImageSize($img_src);  
   $src_w = $size[0]; $src_h = $size[1];
   // 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;

   // Affiche les dimensions optimales
   echo "width=".$dst_w." height=".$dst_h;
}
qui me permet de redimensionner des images qui peuvent provenir de n'importe où dans un cadre d'une taille bien précise.

Il fonctionne bien mais très lent, tous les calculs à effectuer sans doute. Pour 5 images la page met quand même un certain temps à s'afficher et ça pourrait poser souci si les images deviennent plus conséquentes.

Avez-vous un autre moyen beaucoup plus rapide que celui là ?

Merci de votre aide !

ViPHP
ViPHP | 3607 Messages

30 déc. 2006, 13:37

je ne pense pas que le problème vienne des calculs, car ils sont très rapide en php, l'opération la plus lente à mon avis serait plutôt le getimagesize(),
après, je ne sais aps pourquoi ça peut "ramer"... :-k

ViPHP
AB
ViPHP | 5818 Messages

30 déc. 2006, 14:13

Exactement comme dit jojolapine.

Y'a pas photo ça vient du getimagesize. J'ai déjà eu ce pb et je l'ai résolu en faisant comme indiqué dans mes deux derniers messages ici http://www.phpfrance.com/forums/voir_su ... asc-30.php

Si ça peut de donner des idées...
Modifié en dernier par AB le 30 déc. 2006, 14:22, modifié 1 fois.

bobi
Invité n'ayant pas de compte PHPfrance

30 déc. 2006, 14:20

Merci à vous deux.

AB je suis allé voir ton post, ta solution n'est applicable que si l'image est dans ta base non ?

Le souci c'est que mes images sont récupérés ailleurs et sous forme http:....etc

Tu vois une solution pour moi avec ton système ?

Merci

ViPHP
AB
ViPHP | 5818 Messages

30 déc. 2006, 14:35

Dans mon cas :

Par exemple, un visiteur insère des images dans un message avec leur adresse complète http://...jpg.
J'isole les http... par un regex et avant l'enregistrement dans la bdd et je fais un getimagesize sur les images. Puis les dimensions sont enregistrées dans la bdd avec l'url de l'image.
Le getimagesize n'est donc effectué qu'une fois lors du post, mais pas à la lecture.
Mon dernier message sur le lien que j'ai donné précédemment donne un exemple d'utilisation.

Eléphant du PHP | 124 Messages

30 déc. 2006, 14:56

bonjour
je sais pas si je me trompe
j'ai un script du meme genre
sur le tiens tu test les 2 valeur
hauteur ,largeur
le mien teste la largeur et adapte la hauteur en fonction de cette largeur
<?php 
   
    $chem_img = "./doc_partage/photo_iden_utilisateur"; 
    $handle  = opendir($chem_img); 
     while ($file = readdir($handle)) 
        { 
      if(preg_match ("!(\.jpg|\.jpeg|\.gif|\.bmp|\.png)$!i", $file))          
			    { 
                    $listef[] = $file; 
                } 
        } 
      $random_img = rand(0, count($listef));       
    $size = getimagesize($chem_img."/".$listef[$random_img]);     
    $largeur_maxi = 180;    
    if ($size[0] > $largeur_maxi) 
        {         
            $width = $largeur_maxi;         
            $theight = ($size[0]/$largeur_maxi);            
            $height = ($size[1]/$theight); 
        } 
    else 
        {           
            $width = $size[0]; $height = $size[1]; 
        }   
    echo "<a href=\"".$chem_img."/".$listef[$random_img]."\" onclick=\"window.open(this.href,'_blank');return false;\"><img style=\"border: none; width: ".$width."px; height: ".$height."px\" src=\"".$chem_img."/".$listef[$random_img]."\" alt=\"".$listef[$random_img]."\" /></a>"; 
     
    closedir($handle); 
?> 
peut etre ça ,si ça peut te servir :wink:
on regle beaucoup de chose avec le php,
et pour la misere du monde ,on peut s'en servir aussi????

ViPHP
AB
ViPHP | 5818 Messages

30 déc. 2006, 15:06

tilillois

Je fais un peu comme toi et j'adapte la hauteur des images en fonction d'une largeur max pour ne pas déformer ma page.
Mais le pb de Bobi vient du getimagesize qui prend beaucoup de temps sur les images qui sont sur un site distant.
D'où l'idée de stocker les dimensions trouvées une fois pour toute...

bobi
Invité n'ayant pas de compte PHPfrance

30 déc. 2006, 15:58

Je vois à peu près ce qu'il faut faire, je vais voir ce que je peux faire ;)

Merci à vous !

Mammouth du PHP | 1885 Messages

30 déc. 2006, 18:59

Si ton image est distante, le serveur doit d'abord télécharger l'image localement pour faire le test. Voilà pourquoi il y a un délai.
La programmation est l'expression de la poésie d'un programmeur
Génération PHP