2009-07-11 7 views
0

J'essaie d'avoir cette fonction et l'image redimensionnée après chaque boucle, mais elle n'affiche rien jusqu'à ce qu'elle soit bouclée dans le tableau complet. Je suppose que cela a quelque chose à voir avec les fonctions d'image PHP, mais y a-t-il une solution de contournement?La bibliothèque GD de PHP ne restitue pas les visuels tant que la boucle n'est pas terminée

function resize_images($images_l){ 
echo "Resizing Images<br>"; 
$new_height = 200; 
$new_width = 200; 
$c = 1; 

foreach($images_l as $filename) { 
    echo "Image" . $c . "<br>"; 
    $c++; 


    // Get the new dimensions 
    list($width, $height) = getimagesize($filename); 
    echo $new_width . ", " . $new_height . "<br>"; 

    // Create the new image 
    $image_blank = imagecreatetruecolor($new_width, $new_height); 
    $baseimage = imagecreatefromjpeg($filename); 
    imagecopyresampled($image_blank, $baseimage, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 

    // Save the file 
    imagejpeg($image_blank, 's_' . $filename , 100); 

    echo "<img src=\"s_$filename\">"; 
} 
return TRUE; } 

Merci

Répondre

1

Je vous suggère de jeter un oeil à Output Control Functions, vous pourriez vider chaque image après sa remise à l'échelle.

EXEMPLE

<?php 

function gradual_output() 
{ 
    # start using the output buffer. 
    ob_start(); 

    for ($i = 0; $i <= 10; $i++) { 
     echo "loop count: " . $i . "<br />\n"; 

     # flush the buffer to the user. 
     ob_flush(); flush(); 

     # do something that takes a while... 
     sleep(2); 
    } 

    # were done with the buffer, clean up. 
    ob_end_clean(); 
} 

gradual_output(); 

?> 

Tout ce que vous écho après l'appel ob_start() seront mis dans une mémoire tampon, vous pouvez décider si vous voulez vider ce tampon à l'utilisateur.

+0

Cela fonctionne parfaitement! en plaçant ob_start() en dehors de la boucle, puis en rinçant et en effaçant les données à la fin de chaque boucle, l'image et les données redimensionnées sont sorties dans l'ordre dans l'écran. – user103219

0

Je suppose que cela est sur votre serveur web? Votre serveur envoie une seule fois une page Web au client une fois qu'il est en cours d'exécution. Si vous souhaitez afficher toutes les étapes intermédiaires, vous devez créer une page qui se régénère automatiquement ou utiliser javascript pour recharger l'image à intervalles réguliers.

Si c'est sur CLI, comment visualisez-vous les images? Vous postez n'a pas vraiment de sens.

+0

Désolé, cela fonctionnera sur ma propre machine locale. Bien sûr, AJAX serait bien, mais en attendant, comment pourrais-je rafraîchir la page après chaque boucle? – user103219

+0

@razass: Il semble assez clair que Dennis a dit que la page n'est envoyée qu'une seule fois au client, il est donc IMPOSSIBLE de faire des changements incrémentiels par php. Implémenter ceci en utilisant jQuery sera une blague, en prenant 5 minutes maximum. – tomzx

+0

Vous ne pouvez pas actualiser l'image après chaque boucle. C'est un flux de données qui va à votre client Web qui ne commence pas à afficher les données jusqu'à ce que le flux soit FERMÉ ... ce qui n'arrive qu'après la fin de votre boucle. –

Questions connexes