これはphpとmysqlデータベースでblobを画像ファイルに変換することで可能ですか?
BLOBに画像のバイナリデータ(tiff、png、jpegなどの認識可能な形式)が含まれている場合は、BLOBのコンテンツを取得してファイルに書き込み、画像を取得します。
一部の奇妙なオペレーティングシステムでは、出力ファイルに対応する拡張子を付けて、イメージファイルがそのように認識されるようにする必要があります。
インストールしたphp画像ライブラリに応じて、いくつかの異なる方法を使用できます。ここにいくつかの例があります。
エコー<img>は、MySQL結果リソースをループするときに、同じphpスクリプトから複数の画像を表示するために使用するトリックにすぎません。 @NAVEEDが示したように、header()を介して出力することもできます。
Gd:
$image = imagecreatefromstring($blob);
ob_start(); //You could also just output the $image via header() and bypass this buffer capture.
imagejpeg($image, null, 80);
$data = ob_get_contents();
ob_end_clean();
echo '<img src="data:image/jpg;base64,' . base64_encode($data) . '" />';
ImageMagick(iMagick):
$image = new Imagick();
$image->readimageblob($blob);
echo '<img src="data:image/png;base64,' . base64_encode($image->getimageblob()) . '" />';
GraphicsMagick(gMagick):
$image = new Gmagick();
$image->readimageblob($blob);
echo '<img src="data:image/png;base64,' . base64_encode($image->getimageblob()) . '" />';
私の場合、blob画像をファイルに正しく変換するには、base64_decodeを使用する必要がありました。
$path = "/tmp/images";
$sql = "SELECT image_name, image_content FROM images";
$result = mysql_query($sql, $db_con);
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $sql;
die($message);
}
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$image = $row["image_contents"];
$name = $row["image_name"];
// option 1
$file = fopen($path."/".$name,"w");
echo "File name: ".$path."$name\n";
fwrite($file, base64_decode($image));
fclose($file);
// option 2 (oneliner)
// file_put_contents($path."/".$name, base64_decode($image));
}
MySqlテーブルのBlobフィールドに画像を保存していて、これらの画像を取得したい場合は、この記事が役立ちます。
上記の記事の次の部分を見てください。
<?php
if(isset($_REQUEST['id']))
{
// get the file with the id from database
include "dbconfig.php";
$dbconn = mysql_connect($dbhost, $dbusr, $dbpass) or die("Error Occurred-".mysql_error());
mysql_select_db($dbname, $dbconn) or die("Unable to select database");
$id = $_ REQUEST ['id'];
$query = "SELECT `img_name`, `img_type`, `img_size`, `img_data`
FROM img_tbl WHERE id = ‘$id’";
$result = mysql_query($query) or die(mysql_error());
list($name, $type, $size, $content) = mysql_fetch_array($result);
header("Content-length: $size");
header("Content-type: $type");
print $content;
mysql_close($dbconn);
}
?>