Как вывести массив изображений?

Я пытаюсь перечислить (также изменить размер) фотографии в следующем коде. Поэтому я хочу вывести все изображения с идентификатором "х".

Проблема в том, что у меня есть заголовок, который я включил в документ, поэтому я не могу использовать header('Content-type: image/jpeg'); вывести массив изображений, которые я хочу показать. Но если я достану его, он просто показывает группу случайных символов, которые, как я знаю, представляют собой фотографию в виде строки. Я не уверен, как заставить это работать. Я планирую иметь каждую фотографию в отдельном разделе.

<!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">';
}

Но тогда это означает, что я буду выполнять запрос дважды, что, вероятно, не очень хорошая идея? Это единственный способ?

2 ответа

Протокол HTTP обрабатывает один ответ на один вопрос. Работа HTML заключается в том, что он описывает структуру и содержимое в одном HTML-документе и позволяет загружать вторичные ресурсы по ссылке. Правильный способ сделать это - создать img теги в вашем HTML к изображениям, которые должны быть показаны, также позволяющие вам стилизовать их и т. д. В ссылочных URL-адресах вы можете затем передать параметр для конкретного изображения.

псевдокод:

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

Поскольку изображения по определению являются автономными файлами, вы никоим образом не можете отправлять их в том же запросе, что и ссылочный документ.

Если вам действительно нужно динамическое изменение размера изображения, вы можете написать отдельный скрипт для этого. Что-то вроде:

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" />

Вы можете научить скрипт кешировать полученные изображения с измененным размером и обслуживать их непосредственно в будущих запросах.

Другие вопросы по тегам