我正在尝试在以下代码中列出(也重新调整大小)照片。所以我想输出所有带有“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">';
}
但那意味着我将运行两次查询,这可能不是一个好主意?这是唯一的方法吗?
答案 0 :(得分:2)
HTTP协议处理单个问题的单个答案。 HTML的工作方式是它描述单个HTML文档中的结构和内容,并允许通过引用加载辅助资源。正确的方法是在HTML中为需要显示的图片生成img
标签,也允许您设置样式等。在引用的URL中,您可以将参数带到特定图像。
伪代码:
while($row = $myQuery->nextRow())
echo '<img src="/showimage.php?id='.$row->getId().
' alt="'.htmlentities($row->getName()).'">';
由于图像是定义独立文件,因此您无法以与引用文档相同的请求发送它们。
答案 1 :(得分: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" />
您可以教脚本缓存生成的已调整大小的图像,并在将来的请求中直接提供这些图像。