0

我正在尝试在以下代码中列出(也重新调整大小)照片。所以我想输出所有带有“x”id的图像。

问题是我有一个包含在文档中的标题,所以我不能header('Content-type: image/jpeg');用来输出我想要显示的图像数组。但是如果我把它拿出来,它只会显示一堆随机字符,我知道这是字符串中的照片。我不知道如何使这项工作。我也计划将每张照片放在自己的 div 中。

<!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8" />
            <?php include 'topheader.php'; ?>
        </head>

        <body>
            <?php
                ob_start();
                ini_set("gd.jpeg_ignore_warning", 1);
                $roomid = $_GET['room'];
                $query = "SELECT `photoname` FROM `roomsite`.`photos` WHERE `roomid`='$roomid'";
                $getphotos = $connect->prepare($query);
                if ($getphotos->execute()){
                    while ($array = $getphotos->fetch(PDO::FETCH_ASSOC)){

                        $image = imagecreatefromjpeg('userphotos/'.$array['photoname'].'');


                        list($image_width, $image_height, $type, $attr) = getimagesize('userphotos/'.$array['photoname'].'');

                        $new_size = ($image_width + $image_height)/($image_width*($image_height/100));
                        $new_width = $image_width * $new_size;
                        $new_height = $image_height * $new_size;

                        $new_image = imagecreatetruecolor($new_width, $new_height);
                        imagecopyresized($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $image_width, $image_height);
                        $imagearray = imagejpeg($new_image, null);

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


                    }
                } else { die('Query Error'); }
            ?>
        </body>


    </html> 

我可以做这样的事情

while ($array = $getphotos->fetch(PDO::FETCH_ASSOC)){
   echo '<img src="outputphotos.php">';
}

但这意味着我将运行两次查询,这可能不是一个好主意?这是唯一的方法吗?

4

2 回答 2

2

HTTP 协议处理单个问题的单个答案。HTML 的工作方式是它在单个 HTML 文档中描述结构和内容,并允许通过引用加载辅助资源。img执行此操作的正确方法是在 HTML 中为需要显示的图片生成标签,还允许您设置它们的样式等。然后,在引用的 URL 中,您可以将参数传递给特定的图像。

伪代码:

while($row = $myQuery->nextRow())
    echo '<img src="/showimage.php?id='.$row->getId().
         ' alt="'.htmlentities($row->getName()).'">';

由于图像根据定义是独立文件,因此您不能以任何方式将它们发送到与引用文档相同的请求中。

于 2013-04-21T18:51:13.100 回答
0

如果您确实需要动态调整图像大小,您可以为此编写一个单独的脚本。就像是:

http://yourdomain.com/DynamicImage.php?image=foo.png&maxwidth=100&maxheight=100

然后将所有 IMG 标签路由到那里:

<img src="http://yourdomain.com/DynamicImage.php?image=originalImageName.jpg&maxwidth=100&maxheight=100" />

您可以教脚本缓存生成的调整大小的图像,并在未来的请求中直接提供它们。

于 2013-04-21T19:08:09.493 回答