Распечатка изображений блобов MySQL? - PullRequest
1 голос
/ 27 декабря 2011

Я знаю, что об этом уже спрашивали, и я знаю, что вы можете сделать это, создав отдельную страницу для каждого изображения. Но это не идеально для того, что я хочу.

Я хочу сделать эту давнюю вещь отображения нескольких изображений из БД на одной странице:

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;

В отдельном файле?

Ответы [ 2 ]

3 голосов
/ 27 декабря 2011

У вас есть две основные проблемы:

  1. Поскольку $thumb содержит двоичные данные изображения, браузер не поймет его, если вы не сообщите браузеру, какие это данные (например, image/jpg).

  2. Вы должны указать браузеру, где находятся данные.

Допустим, вы хотите создать отображение изображениябольшой палец на этой странице:

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

Атрибут src сообщает браузеру, где он может найти данные изображения.Таким образом, он используется для решения проблемы 2. Он ожидает Uniform Resource Locator (URI).

Так как же получить $thumb в URI?Есть несколько способов сделать это, включая один , связанный в комментарии .

Однако, если изображение не очень большое и вам не нужно специально его кэшировать (например,HTML должен кэшироваться, но не изображение большого пальца), вы можете использовать data: URI-схему 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 голос
/ 27 декабря 2011

Вы можете использовать Схема URI данных . Но учтите, что не все браузеры поддерживают этот тип 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>";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...