我的网站目前在文件服务器上使用图片。图像显示在用户可以根据需要拖放的页面上。这是通过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属性来加载包含图像的另一个页面。但我需要将图像本身显示在页面上。 (注意:我说图像,意思是至少一个图像,但页面上多达8个。)
非常感谢任何帮助。
答案 0 :(得分:7)
嗯,你可以做一些事情。您可以创建一个将呈现图像的页面
<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;
}
或者,你可以将它6464编码到src中(注意,并非所有浏览器都能很好地处理它):
<img src="data:image/jpeg;base64,<?php echo base64_encode($img); ?>" />
答案 1 :(得分:4)
但我需要[有效]将该图像作为img标签的
正如Byron已经说过的,接受的正确方法是在独立的图像资源中输出blob,并使用img
标记嵌入blob。这是唯一的好方法。您可以使用data:
URIs,但他们
几乎从来都不是一个好的选择。
答案 2 :(得分:3)
执行此操作的常规方法是使用<img src=/path/to/script?id=32>
字段。它将显示在页面上而不是链接。这有什么问题?您想将图像数据嵌入HTML吗?
为了提高效率,您可以实现某种类型的缓存,即将图像数据写入文件,如果找到它,则执行header(location...)
而不是再次查询数据库。此外,应设置browser caching headers,以便浏览器在本地缓存图像时不下载该图像。
答案 3 :(得分:1)
你可以试试这个:
$img = $row['IMAGE']->load();
print('<img src="data:image/png;base64,'.base64_encode($img).'" />');
答案 4 :(得分:0)
<?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);
?>