在 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】:

您可以使用widthheight 属性在浏览器中缩放它们(或者仅使用一个属性来保持纵横比),但是由于带宽、页面性能和图像质量等许多原因,这很糟糕。

您可以使用 GDImagick 等库重新调整图像大小

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_readableis_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 BYLIMITWHERE 子句来获取所需的图像。例如,您可能只想执行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 的图像的主要内容,如果未能解决你的问题,请参考以下文章

如何将sql数据放入php表中

php 魔术师调整大小 - 显示图像而不是保存到文件夹

在 PHP 中调整 PHP GD 生成的图像的大小并显示它

PHP / MySQL - 显示来自blob的图像[重复]

PHP显示来自MySQL的图像BLOB [重复]

如何在 PHP codeigniter 中显示来自 FTP 服务器的图像? [复制]