25

画像を文字列として含むこのデータベースがあります。これらの文字列は次のようになります。

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD...

この画像を表示するリンクを作成する必要があります。いいねsomething.com/?id=27はイメージです。画像はすべてjpeg形式です。これが私が試したものですが、うまくいきませんでした:

<?php
  $host = "smth";
  $user = "smth";
  $pass = "smth";
  $db_name = "smth";
  $dbh = new PDO("mysql:host=$host;dbname=$db_name", $user, $pass);
  $dbh->exec("SET NAMES utf8");
  $q = $dbh->prepare("select content from img where id = :id");
  $q->execute(array(':id'=>$_GET['id']));
  $row = $q->fetch(PDO::FETCH_BOTH);
  header("Content-type: image/jpeg");
  echo $row['content'];
?>

データは正しく取得されていますが、画像が表示されません。

このリンクを次のように使用できるようにする必要がありますが、<img src="mysite.com?id=21" />このソリューションは必要ありません。<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABA..." />

ありがとう!

4

6 に答える 6

44

問題の解決策は次のとおりです。

PHP / HTML で base64 文字列 (gif) を画像にデコードする方法

そのソースを引用しますが、変更します:

最初のケースを取り除き、文字列をデコードすることを選択した場合は、デコードされた画像データをエコーする前にこれを追加する必要があります。

header("Content-type: image/gif");
$data = "/9j/4AAQSkZJRgABAQEAYABgAAD........";
echo base64_decode($data);

2 番目のケースでは、代わりにこれを使用します。

echo '<img src="data:image/gif;base64,' . $data . '" />';

同じ画像が複数のページに表示される場合、ブラウザはキャッシュを実行しないため、2 番目のケースは良くありません。

于 2013-04-28T11:04:15.897 に答える
10

これを使って:

$code_base64 = $row['content'];
$code_base64 = str_replace('data:image/jpeg;base64,','',$code_base64);
$code_binary = base64_decode($code_base64);
$image= imagecreatefromstring($code_binary);
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
于 2013-04-28T11:04:49.773 に答える