在PHP中将二进制字符串转换为图像?

在PHP中将二进制字符串转换为图像?,php,sql-server-2012,blob,Php,Sql Server 2012,Blob,请帮我写代码。我必须输出一个图像(这是PNG格式的),由sql server转换成二进制文件或BLOB。请查看以下代码: <?php $myServer = "111.22.33.44"; $myUser = "username"; $myPass = "password"; $myDB = "database"; $connection = sqlsrv_connect($myServer, array('UID'=>$myUser, 'PWD'=>$myPass,

请帮我写代码。我必须输出一个图像(这是PNG格式的),由sql server转换成二进制文件或BLOB。请查看以下代码:

<?php
$myServer = "111.22.33.44";
$myUser = "username";
$myPass = "password";
$myDB = "database";


$connection = sqlsrv_connect($myServer, array('UID'=>$myUser, 'PWD'=>$myPass, 
                             'Database'=>$myDB));

if ($connection === false){
    print_r( sqlsrv_errors());
}

$qry_getCategory = "SELECT Sketch FROM Sample_Specs_Comment WHERE StyleID = '1'";

$stmt = sqlsrv_query($connection, $qry_getCategory);

if ($stmt) {
    while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {     
    $imgDes = $row["Sketch"];
    echo $imgDes;
} else{
    echo "Submission Unsuccessful!";
    die(print_r(sqlsrv_error(), true));
}
?>

我不确定您是只想为请求返回一个图像,还是希望在一个请求期间能够从数据库加载多个图像并显示它们

我假设是后者,因为您说“我必须在页面中输出数据”

快速看一下,我发现你可以走两条路。如果二进制数据是一个有效的图像,并且您知道它的类型,那么您可以将它保存到一个文件中(可能是在一个临时的ramdisk中,以避免在磁盘上写入),然后像正常情况一样从该文件中读取。我可能不会这样做,因为您的数据库中已经有二进制数据,并且将其保存到另一个位置表明设计是错误的,更正确的方案是立即将映像保存在磁盘上,并在数据库中存储对它的引用

因此,由于二进制数据已经在数据库中,我将使用编码将其直接加载到页面上的图像标记中

这方面的伪代码类似于

$imageData = getBinaryImageDataFromDb();
$imageData = base64_encode($imageData);

// in html

<img src="data:image/png;base64,<?php echo $imageData?>">

我想我已经解决了这个问题。我已经将二进制数据编码为base64

if ($stmt) {
    while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {     
    $imgDes = $row["Sketch"];
    $imageData = base64_encode($imgDes);
    }
}
和HTML格式:

<img src="<?php  echo $imageData; ?>" alt="Image"/>
“alt=”Image“/>

这应该会有帮助。感谢回答这个问题的人。

解释更多有助于回答这个问题您上面的是下载文件的标题而不是显示它
我必须在一个页面中输出数据
那么是哪一个呢?如果您只想显示它,您需要的只是内容类型,但是必须知道图像类型。现在将其转换为PNG,这取决于它是什么,这有点难说。另外,我们将忽略一个事实,
$test
是未定义的(据我所知),因此您的头是
头('Content-Disposition:inline;filename=“”)
也许您的意思是
$name=“test.PNG";但是不管怎样…哦,你应该在这里用一个适当的错误
如果($connection==false){
否则它只会给你这是什么
sqlsrv_errors()
然后继续告诉查询失败。@Siddharthasesunuri抱歉,我修改了问题,以便更清楚地理解。好的,谢谢。@ArtisticPhoenix使用什么更有效的代码?这将显著增加数据量,并且如果您在上使用相同的图像,也将无法进行缓存多页。你最好以评论的形式回复,并接受问题的答案。
if ($stmt) {
    while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {     
    $imgDes = $row["Sketch"];
    $imageData = base64_encode($imgDes);
    }
}
<img src="<?php  echo $imageData; ?>" alt="Image"/>