在 php 中调整和显示来自 sql 的图像
Posted
技术标签:
【中文标题】在 php 中调整和显示来自 sql 的图像【英文标题】:resize and display images from sql in php 【发布时间】:2012-07-14 19:20:36 【问题描述】:我想更改以下 php 代码,以便一次调整大小并显示一个图像,并带有“下一个”和“上一个”按钮,以便浏览照片。我不想要任何图片库或灯箱解决方案,而只是在页面上显示照片。我是 php 新手,所以如果有人可以提供帮助或为我指明正确的方向,我们将不胜感激。
$sql = "select * from people";
$result = mysql_query($sql) or die ("Could not access DB: " . mysql_error());
while ($row = mysql_fetch_assoc($result))
echo "<div class=\"picture\">";
echo "<p>";
// Note that we are building our src string using the filename from the database
echo "<img src=\"images/" . $row['filename'] . "\" alt=\"\" /><br />";
echo $row['fname'] . " " . $row['lname'] . "<br />";
echo "</p>";
echo "</div>";
source of above code
【问题讨论】:
你想只显示一张图片,然后点击下一张/上一张显示另一张? 是的,数据库中的下一张图片! 【参考方案1】:您可以使用width
和height
属性在浏览器中缩放它们(或者仅使用一个属性来保持纵横比),但是由于带宽、页面性能和图像质量等许多原因,这很糟糕。
您可以使用 GD
或 Imagick
等库重新调整图像大小
IMagick
的快速示例:
$hThumb = new Imagick($path_to_file); // Source file
$hThumb->thumbnailImage($x, $y); // You can use 300, 0 to do 300 width and maintain aspect ratio.
$hThumb->stripImage(); // remove meta data
$hThumb->writeImage($path_to_thumb); // write the image to disk
注意
确保拥有读/写权限。您可以使用is_readable
和is_writable
验证此权限。
加载中
建议使用AJAX
加载图像,如果使用JQuery
或类似库,这很容易。
$('#nextBtn').click(function()
var index = 0; // Store this in your image ID tag perhaps
// e.g. $('#theImage').attr('id').replace('image', '')
// where ID is imageX
$.ajax(
url: 'getImages.php?index=' + index,
type: "GET",
success: function(data)
var result = $.parseJSON(data);
if (result.success)
// Set your image src with the new path.
// Use result.image_data.src etc...
);
);
PHP 也比较简单,类似这样的结构:
<?php
$return = array('success' => false, 'image_data' => array());
if (isset($_GET['index']) && is_numeric($_GET['index'))
// Fetch your image
$return = array(
'success' => true,
'image_data' => array(
'src' => $src,
'title' => $title,
'index' => $index
)
);
echo json_encode($return);
?>
** 另一个注释**
正如 kgb 所述,您应该在上传时调整它们的大小,但是,它们可能不是用户提交的,因此您还可以检查输出中是否存在拇指并根据需要生成任何拇指。当然,不要为每个视图都生成它们。
【讨论】:
好的,真棒。感谢您的快速回复!似乎在上传时调整大小是我完全有能力做到的。现在我需要的只是让数据库一次显示一个图像,并带有下一个/上一个按钮。 @user1402910 使用ORDER BY
、LIMIT
和WHERE
子句来获取所需的图像。例如,您可能只想执行ORDER BY date DESC LIMIT 1
的第一次加载 - 然后从@987654339 @你可以使用LIMIT index, 1
,所以它会根据你刚刚显示的图像偏移行。【参考方案2】:
您应该在上传时调整图像大小,而不是在输出时。存储原始图像和调整大小的图像,在列表中显示小图像并在用户需要时显示全尺寸...
来自imagecopyresampled() 文档的示例代码:
// Get new dimensions
list($width, $height) = getimagesize($filename);
$widthNew = 320; // You decide
$heightNew = 240; // You decide
// Resample
$imageNew = imagecreatetruecolor($widthNew, $heightNew);
$imageOld = imagecreatefromjpeg($filename);
imagecopyresampled($imageNew, $imageOld, 0, 0, 0, 0, $widthNew, $heightNew, $width, $height);
// Output
imagejpeg($imageNew, $newFilename, 100);
此示例期望 gd 扩展包含在 php 中。 Martin 提到的 Imagick 扩展更强大,提供更好的界面,但很少包含在虚拟主机中。
还为您搜索了这个:http://www.9lessons.info/2009/03/upload-and-resize-image-with-php.html
【讨论】:
以上是关于在 php 中调整和显示来自 sql 的图像的主要内容,如果未能解决你的问题,请参考以下文章