簡體   English   中英

在PHP中將二進制字符串轉換為圖像?

[英]Convert binary string to Image in PHP?

請幫我處理我的代碼。 我必須輸出一個圖像(這是在 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));
}
?>

文本圖像文件的數據以 0x89504E470 開頭......我假設這是一種二進制代碼或 BLOB。 這是在數據庫的“草圖”列中。 我想將 BLOB 輸出為可查看的格式,如“PNG”或“JPEG”。

這是下面的輸出:

IHDR�Y�"l�sRGB���gAMA���a pHYs���o�d<�IDATx^�}x�vBHH 

我想我已經解決了這個問題。 我已將二進制數據編碼為 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"/>

這應該有幫助。 感謝回答問題的人。

我不確定您是否只想為請求返回一張圖像,或者您是否希望能夠在一個請求期間從數據庫加載多張圖像並顯示它們?

我會假設是后者,因為您說“我必須在頁面中輸出數據”。

快速瀏覽一下,我看到您可以走兩條路線。 如果二進制數據是有效圖像並且您知道類型,則可以將其保存到文件中(可能保存在臨時 ramdisk 中以避免寫入磁盤)並像平常一樣從該文件中讀取。 我可能不會走這條路,因為您的數據庫中已經有了二進制數據並將其保存到另一個地方表明設計是錯誤的,更正確的情況是立即將圖像保存在磁盤上並存儲對它在數據庫中。

因此,由於二進制數據已經在數據庫中,我會使用base64編碼將其直接加載到頁面上的圖像標記中。

這個的偽代碼類似於

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

// in html

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

由於您不從文件加載數據,因此除了文件之外,像mime_content_type()等普通函數將無法工作。 我們不想為此保存臨時文件。

因此,要檢查文件的文件格式,您可以檢查起始字節並使用它確定圖像類型。

JPEG: "\xFF\xD8\xFF"
PNG: "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM