【问题标题】:mySQL blob images printout?mySQL blob 图像打印输出?
【发布时间】:2011-12-27 14:15:10
【问题描述】:

我知道以前有人问过这个问题,而且我知道您可以通过为每张图片制作单独的页面来做到这一点。但这并不适合我想要的。

我想做一个古老的事情,在同一页面上显示来自数据库的多个图像:

echo "<table>";
echo "<tr class ='tablehead'><td>Name</td><td>Location</td><td>Review</td><td>Image</td><td>Thumb</td></tr>";

while ($row = mysql_fetch_array($query))
{   
    echo "<tr>";
    echo "<td>" . $row['user_fname'] . "</td>";
    echo "<td>" . $row['user_location'] . "</td>";
    echo "<td>" . $row['user_review'] . "</td>";
    echo "<td>" . $row['user_image'] . "</td>";
    echo "<td>" . $row['user_thumb'] . "</td>";
    echo "</tr>";
}

echo "</table>";

user_image 和 user_thumb 是 blob 图像,有没有办法在该页面上显示它们,也许将它们设置为 php 变量,然后转换为 javascript 或类似的东西?而不是:

  header('Content-type: image/jpg');
  echo $thumb;

在单独的文件中?

【问题讨论】:

标签: php javascript mysql blob


【解决方案1】:

你这里基本上有两个问题:

  1. 由于$thumb包含图像的二进制数据,浏览器不会理解它,除非你告诉浏览器它是什么数据(例如image/jpg)。

  2. 你需要告诉浏览器数据在哪里。

假设您要创建一个在该页面中显示拇指的图像:

<td><img src="..." alt="thumb"></td>

src 属性告诉浏览器它可以在哪里找到图像的数据。所以它被用来解决问题2。它需要一个统一资源定位符(URI)。

那么如何将$thumb 放入URI 中呢?有多种方法可以做到这一点,包括linked in a comment。

但是,如果图像不是很大并且您不需要专门对其进行缓存(例如,应该缓存 HTML,而不是缩略图),您可以使用data: URI Scheme­Wikipedia:

$thumbSrc = 'data:image/jpg;base64,'.base64_encode($thumb);

然后您可以将该变量输出为src 属性的值:

<td><img src="<?php echo $thumbSrc; ?>" alt="thumb"></td>   

希望这有帮助。

完整答案:

echo "<table>";
    echo "<tr class ='tablehead'><td>Name</td><td>Location</td><td>Review</td><td>Image</td><td>Thumb</td></tr>";
    while ($row = mysql_fetch_array($query))
    {   
        echo "<tr>";
            echo "<td>" . $row['user_fname'] . "</td>";
            echo "<td>" . $row['user_location'] . "</td>";
            echo "<td>" . $row['user_review'] . "</td>";                    
            echo '<td><img src="data:image/jpg;base64,', base64_encode($row['user_thumb']), '" alt='thumb'></td>'; 
            echo '<td><img src="data:image/jpg;base64,', base64_encode($row['user_image']), '" alt='image'></td>';
        echo "</tr>";
    }
echo "</table>";

【讨论】:

  • 感谢 hakre,措辞完美的答案,希望对寻找此答案的其他人非常有用。
  • @EricBanderhide:我编辑了你的添加,你有一些 HTML 错误(缺少 src 属性)。看看我现在如何使用echo。这可能会使编写 HTML 输出代码对你来说更容易。就像你使用base64_encode 一样,其他$row 值也需要编码,请参阅htmlspecialchars。
【解决方案2】:

您可以使用Data URI Scheme。但请注意,并非所有浏览器都支持这种类型的 URI。

echo "<table>";
echo "<tr class ='tablehead'><td>Name</td><td>Location</td><td>Review</td><td>Image</td><td>Thumb</td></tr>";
while ($row = mysql_fetch_array($query))
{   
    echo "<tr>";
    echo "<td>" . $row['user_fname'] . "</td>";
    echo "<td>" . $row['user_location'] . "</td>";
    echo "<td>" . $row['user_review'] . "</td>";
    echo "<td>" . $row['user_image'] . "</td>";
    echo "<td><img src='data:image/jpeg;base64," . base64_encode($row['user_thumb']) . "' alt='' /></td>";
    echo "</tr>";
}
echo "</table>";

【讨论】:

  • 我忘记了base64_encode() 呼叫 :) 编辑了我的帖子,现在试试
猜你喜欢
  • 1970-01-01
  • 2014-01-01
  • 2016-08-09
  • 2021-02-18
  • 2021-02-09
  • 2016-07-27
  • 1970-01-01
  • 2017-08-16
  • 2016-02-03
相关资源
最近更新 更多