0

画像を保存しました(PNG、200x209)

$img = chunk_split(base64_encode(file_get_contents("image.png")));
$sql = "INSERT INTO table (img) VALUES ('$img') WHERE userid = 10";
mysql_query($sql);

(imgはMEDIUMBLOBタイプです)

次にそれを取得しようとします(show.php):

header("Content-type: image/jpeg");

$sql = "SELECT img FROM table WHERE userid = 10 LIMIT 1";
$res = mysql_query($sql);
while ($row = mysql_fetch_assoc($res)) {
    $image = base64_decode($row['img']);
}

echo $image;

show.phpをリクエストすると、ほぼ同じ画像が表示されますが、別のサイズになります:136x94 =)

なぜそれが起こるのですか?

4

1 に答える 1

1

画像をそのまま保存することをお勧めします。MySQLのBLOBデータ型は、バイナリデータに特に使用されます。そして、この画像はバイナリファイルです。そして、base64エンコーディングを削除します。データサイズを増やすだけです。

コードでは、png画像を保存していますが、jpegを出力しています。両方のコンテンツタイプは同じである必要があります。

したがって、挿入コードは次のようになります。

$img = file_get_contents("image.png");
$sql = "INSERT INTO table (img) VALUES ('$img') WHERE userid = 10";
mysql_query($sql);

そしてそれを

header("Content-type: image/png");

$sql = "SELECT img FROM table WHERE userid = 10 LIMIT 1";
$res = mysql_query($sql);
echo mysql_result($res, 0);
于 2012-12-05T15:44:11.123 に答える