2011-05-24 795 views
10

这是可能的与PHP和一个MySQL数据库将一个BLOB转换成一个图像文件?PHP:将一个blob转换成一个图像文件

+1

请添加更多细节。 BLOB字段包含什么?你打算做什么? – 2011-05-24 06:21:47

+1

如果它是作为BLOB存储的图像,是的。 – 2011-05-24 06:24:27

+0

你尝试设置标题,然后阅读这个blob? – k102 2011-05-24 06:25:30

回答

4

如果BLOB包含图像的二进制数据(以可识别的格式,如tiff,png,jpeg等),请取BLOB的内容,将其写入文件,然后...一个图像。

在一些奇怪的操作系统上,你必须给输出文件一个对应的扩展名,这样图像文件才能被识别。

1

如果您在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); 
} 
?> 
+2

对于从这个例子复制/粘贴的任何人,请注意它使用不好引号 – kurdtpage 2017-03-29 09:41:11

8

根据您安装的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()) . '" />'; 
3

对我来说,我不得不用BASE64_DECODE为BLOB图像正确转换进入文件。

$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)); 
} 
相关问题