【问题标题】:Oracle Blob as img src in PHP pageOracle Blob 作为 PHP 页面中的 img src
【发布时间】:2011-03-04 15:11:12
【问题描述】:

我有一个当前使用文件服务器上的图像的站点。图像出现在用户可以根据需要拖放的页面上。这是使用 jQuery 完成的,并且图像包含在一个列表中。每张图片都很标准:

<img src='//network_path/image.png' height='80px'>

但是,现在我需要引用在 Oracle 数据库中存储为 BLOB 的图像(对此没有选择,因此不值得讨论)。我可以毫无问题地检索 BLOB 并自行显示:

$sql = "SELECT image FROM images WHERE image_id = 123";
$stid = oci_parse($conn, $sql);
oci_execute($stid);
$row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS);
$img = $row['IMAGE']->load();
header("Content-type: image/jpeg");
print $img;

但我需要 [有效地] 将该图像作为 img 标签的 src 属性。我尝试了 imagecreatefromstring() 但这只是在浏览器中返回图像,而忽略了其他 html。我查看了数据 uri,但 IE8 大小限制排除了这一点。

所以现在我有点卡住了。我的搜索不断使用 src 属性来加载包含图像的另一个页面。但我需要图像本身才能真正显示在页面上。 (注意:我说的是图片,意思是至少一张图片,但一页最多八张)。

任何帮助将不胜感激。

【问题讨论】:

    标签: php oracle image blob


    【解决方案1】:

    执行此操作的正常方法是使用 &lt;img src=/path/to/script?id=32&gt; 字段。它将显示在页面上,而不是作为链接。这有什么问题?是否要将图像数据嵌入到 HTML 中?

    为了提高效率,您可以实现某种类型的缓存,即将图像数据写入文件并在找到时执行header(location...),而不是再次查询数据库。还应设置browser caching headers,以便浏览器在本地缓存图像时不会下载图像。

    【讨论】:

      【解决方案2】:

      你可以试试这个:

      $img = $row['IMAGE']->load();
      print('<img src="data:image/png;base64,'.base64_encode($img).'" />');
      

      【讨论】:

        【解决方案3】:

        嗯,你可以做一些事情。您可以制作一个将呈现图像的页面

        <img src="image.php?id=123" />
        

        那个 image.php 页面会有这个:

        $sql = "SELECT image FROM images WHERE image_id = " . (int) $_GET['id'];
        $stid = oci_parse($conn, $sql);
        oci_execute($stid);
        $row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS);
        if (!$row) {
            header('Status: 404 Not Found');
        } else {
            $img = $row['IMAGE']->load();
            header("Content-type: image/jpeg");
            print $img;
        }
        

        或者,您可以将其 base64 编码到 src 中(注意,并非所有浏览器都能很好地处理这个问题):

        <img src="data:image/jpeg;base64,<?php echo base64_encode($img); ?>" />
        

        【讨论】:

        • 非常正确,谢谢。我最初尝试过这个,但无法让它工作。问题不在于方法,只是在脚本 url 中传递了错误的变量名。再次感谢。
        【解决方案4】:

        但我需要 [有效地] 将该图像作为 img 标签的 src 属性获取

        正如 Byron 已经说过的,公认的正确方法是将 blob 输出到独立的图像资源中,并使用 img 标签嵌入它。这是唯一的好方法。你可以使用data: URIs,但他们

        1. 增肥你的 HTML 代码
        2. 不要在 IE limited to 32 KB in IE 8,
        3. 数据量扩大33%,
        4. 取消了浏览器缓存图片资源的可能性。

        几乎从来都不是一个好的选择。

        【讨论】:

          【解决方案5】:
          <?php
          if(isset($_POST['']))//get the id
          $roll_no=$_POST[''];
          $conn = oci_connect("", "", "");//DB connection
          $query = 'SELECT image FROM TABLE where id=:id';
          $stmt = oci_parse ($conn, $query);
          oci_bind_by_name($stmt, ':id', $id);
          oci_execute($stmt);
          $arr = oci_fetch_array($stmt, OCI_ASSOC);
          $result = $arr['image']->load();
          header("Content-type: image/JPEG");
          echo $result;
          oci_close($conn);
          ?>
          

          【讨论】:

          • 最好加个解释给你回答。
          猜你喜欢
          • 2021-12-29
          • 1970-01-01
          • 2013-02-17
          • 2011-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-16
          • 2014-09-09
          相关资源
          最近更新 更多