如何使图像加载更快?

时间:2013-07-07 21:58:40

标签: php html image

如何让这些图像加载更快?我有一个显示个人资料图片的循环,照片需要1到2.5秒才能加载。不是一个接一个,而是一次又一次。我尝试用PHP重新调整大小,但这并没有真正改变任何东西。我不知道如何用这样的循环预加载这些图像。我该怎么做才能提高负载性能?

PHP

$query = "SELECT `photoid` FROM `site`.`photos` WHERE `profileid`='$profileid'";
         try{
    $getphotos = $connect->prepare($query);
    $getphotos->execute();
    while ($array = $getphotos->fetch(PDO::FETCH_ASSOC)){
         echo '<div id="photo"><img src="photoprocess.php?photo='.$array['photoid'].'"></div>';
    }
    } catch (PDOException $e) {
         echo $e->getMessage();
    }

CSS

#photo img {
    max-width:100%; 
    max-height:100%;
}

photoprocess.php

       $photoid = $_GET['photo'];

    $query = "SELECT `ext` FROM `site`.`photos` WHERE `photoid`='$photoid'";
        try{
            $getphotos = $connect->prepare($query);
            $getphotos->execute();
            $array = $getphotos->fetch(PDO::FETCH_ASSOC);
        } catch (PDOException $e) {
            echo $e->getMessage();
        }   

         $ext = $array['ext'];

        $image = imagecreatefromjpeg('userphotos/'.$photoid.''.$ext.'');
        $imagearray = imagejpeg($image, null);

        header('Content-type: image/jpeg'); 
            echo $imagearray;

我也有扩展检查作为“if语句”,但那些不能减慢这么多。

2 个答案:

答案 0 :(得分:4)

这部分

    $image = imagecreatefromjpeg('userphotos/'.$photoid.''.$ext.'');
    $imagearray = imagejpeg($image, null);

不应该是*并且在服务器上会很重。您正在加载(解码)并保存(重新编码)图像,没有明显的原因。

使用fpasshtru()

之类的内容
$name = 'userphotos/'.$photoid.''.$ext.'';
$fp = fopen($name, 'rb');

header('Content-type: image/jpeg'); 

fpassthru($fp);

或者直接链接到图片。除非您进行某些安全检查或某些事情,或者图像存储在Web根目录之外,否则根本不需要通过PHP。

* =除非您有一个非常具体的用例,例如从存储的图像中删除EXIF数据。在这种情况下,您应该使用某种形式的缓存。

答案 1 :(得分:0)

目前,您正在将图像数据从磁盘加载到图像缓冲区中,该缓冲区由PHP验证。之后,再次将图像数据重新编码为jpg图像缓冲区并输出。 这没用。您只需加载文件的thruput(阅读fpassthru)。这也是更高的内存效率,因为图像不需要一次完全加载到内存中。

这样会更快,但速度更快,因为我认为你可以只使用.htaccess将带有图片ID的网址重定向到实际图片。你甚至不需要PHP。