mySQL blob图像打印输出?

时间:2011-12-27 14:15:10

标签: php javascript mysql blob

我知道之前已经问过,我知道你可以通过为每个图像制作一个单独的页面来实现。但这不是我想要的理想选择。

我想在同一页面上显示来自数据库的多个图像的那个古老的东西:

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_imageuser_thumb是blob图像,是否有人在该页面上显示所有内容,可能将它们设置为php变量然后转换为javascript或其他内容?而不是:

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

在单独的文件中?

2 个答案:

答案 0 :(得分:3)

这里基本上有两个问题:

  1. 由于$thumb包含图片的二进制数据,除非您告诉浏览器它是什么数据(例如image/jpg),否则浏览器将无法理解它。

  2. 您需要告诉浏览器数据的位置。

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

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

答案 1 :(得分:1)

您可以使用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>";