【问题标题】:PHP image GD library not outputting visuals until loop is completePHP图像GD库在循环完成之前不输出视觉效果
【发布时间】:2010-11-09 21:36:01
【问题描述】:

我试图让这个函数在每次循环后输出数据和重新缩放的图像,但它在完成对整个数组的循环之前不会显示任何内容。我假设这与 PHP 图像函数有关,但有解决方法吗?

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; }

谢谢

【问题讨论】:

    标签: php image image-processing


    【解决方案1】:

    我建议你看看Output Control Functions,你可以在重新缩放后刷新每个图像。

    示例

    <?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();
    
    ?>
    

    您在调用 ob_start() 后回显的任何内容都将被放入缓冲区,您可以决定何时将该缓冲区刷新给用户。

    【讨论】:

    • 这很完美!通过将 ob_start() 放在循环之外,然后在每个循环结束时刷新和清除数据,调整大小的图像和数据按顺序输出到屏幕。
    【解决方案2】:

    我假设这是在您的网络服务器上?您的服务器仅在完成运行后向客户端发送一次网页。如果要显示所有中间阶段,则需要构建一个自动刷新的页面或使用 javascript 每隔一段时间重新加载图像。

    如果这是在 CLI 上,那么您是如何查看图像的。你的帖子真的没有意义。

    【讨论】:

    • 抱歉,这将在我自己的本地机器上运行。当然 AJAX 会很好,但与此同时,我将如何在每次循环后刷新页面?
    • @razass:很明显,Dennis 说页面只发送一次给客户端,因此不可能通过 php 对其进行增量更改。使用 jQuery 实现这个将是一个笑话,最多需要 5 分钟。
    • 每次循环后无法刷新图像。它是一个数据流,它会发送到您的网络客户端,直到流关闭后才会开始显示数据......直到循环完成后才会发生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多