【问题标题】:Php : Convert a blob into an image filephp : 将 blob 转换为图像文件
【发布时间】:2011-08-31 16:16:45
【问题描述】:

这可以通过 php 和 mysql 数据库将 blob 转换为图像文件吗?

【问题讨论】:

  • 请添加更多细节。 BLOB 字段包含什么?你打算做什么?
  • 如果是存储为 BLOB 的图像,是的。
  • 您是否尝试设置标题然后阅读此 blob?
  • 如果 blob 包含图像的二进制数据,那么您要问的只是将数据放入具有正确文件扩展名的文件中,或将内容回显到带有标题的页面的问题指示它是什么图像格式的信息
  • 我只是打算将 blob 转换为图像文件...

标签: php mysql image blob


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果你在 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);
    }
    ?>
    

    【讨论】:

    • 对于从这个例子中复制/粘贴的任何人,请注意它使用了错误的引号
    • 9 年后...“此域名已于 2020 年 3 月 15 日到期,正在等待续订或删除。”
    • 这些答案大部分都是旧的,但 mysql 函数已被贬低,不再包含在 PHP 中。请改用 mysqli 或 PDO。
    【解决方案3】:

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

    注意,回显 只是我在循环通过 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())  . '" />';
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-20
        • 1970-01-01
        • 2016-05-29
        • 1970-01-01
        • 2012-11-04
        • 1970-01-01
        相关资源
        最近更新 更多