Преобразовать двоичную строку в изображение в PHP? - PullRequest
0 голосов
/ 03 октября 2018

Пожалуйста, помогите мне с моим кодом.Я должен вывести изображение (это в формате PNG), которое преобразуется в двоичный файл или большой двоичный объект с помощью сервера sql.Пожалуйста, просмотрите код ниже:

<?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 

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Я думаю, что решил проблему.Я закодировал двоичные данные в 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"/>

это должно помочь. Спасибо людям, которые дали ответы на проблему.

0 голосов
/ 03 октября 2018

Я не уверен, хотите ли вы вернуть только изображение для запроса или если вы хотите иметь возможность загружать несколько изображений из базы данных за один запрос и отображать их?

Я предполагаюпоследнее, так как вы говорите: «Я должен вывести данные на странице ».

Глядя на это быстро, я вижу два пути, по которым вы можете идти.Если двоичные данные являются допустимым изображением, и вы знаете тип, который вы можете просто сохранить в файл (возможно, на временном виртуальном диске, чтобы избежать записи на диск) и прочитать из этого файла, как обычно.Я, вероятно, не пошел бы по этому пути, хотя, поскольку у вас уже есть двоичные данные в вашей базе данных, и сохранение их в другом месте указывает на неправильный дизайн, и более правильным сценарием было бы сразу сохранить образ на диске и сохранить ссылку наэто в базе данных.

Итак, поскольку двоичные данные уже есть в базе данных, я бы пошел с загрузкой их непосредственно в тег изображения на вашей странице, используя 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"
...