PHP : 将 blob 转换为图像文件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6106470/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 23:22:23  来源:igfitidea点击:

Php : Convert a blob into an image file

phpmysqlimageblob

提问by josh

Is this possible with php and a mysql database to Convert a blob into an image file?

这是否可以使用 php 和 mysql 数据库将 blob 转换为图像文件?

采纳答案by Hyperboreus

If the BLOB contains the binary data of an image (in a recognizable format like e.g. tiff, png, jpeg, etc), take the content of the BLOB, write it to a file, and voilà... you got an image.

如果 BLOB 包含图像的二进制数据(以可识别的格式,例如 tiff、png、jpeg 等),则获取 BLOB 的内容,将其写入文件,然后瞧……您得到了一个图像。

On some strange operation systems you have to give the output file a correspondig extension, so that the image file can be recognised as such.

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

回答by Robert Cesaric

You can use a few different methods depending on what php image library you have installed. Here's a few examples.

根据您安装的 php 图像库,您可以使用几种不同的方法。这里有几个例子。

Note, the echo <img> is just a trick I use to display multiple images from the same php script when looping through a MySQL result resource. You could just as well output via header() as @NAVEED had shown.

请注意, echo <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):

ImageMagick (iMagick):

$image = new Imagick();
$image->readimageblob($blob);
echo '<img src="data:image/png;base64,' .  base64_encode($image->getimageblob())  . '" />';

GraphicsMagick (gMagick):

GraphicsMagick (gMagick):

$image = new Gmagick();
$image->readimageblob($blob);
echo '<img src="data:image/png;base64,' .  base64_encode($image->getimageblob())  . '" />';

回答by bonyiii

In my case i had to use base64_decode to convert blob images correctly into file.

就我而言,我必须使用 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));
}

回答by Naveed

If you are storing images in MySql table Blob field and want to get these images then this article is useful for you:

如果您将图像存储在 MySql 表 Blob 字段中并希望获取这些图像,那么本文对您很有用:

Look at the following part from above article:

看上面文章的以下部分:

<?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);
}
?>