utilizando una subir solo ruta mostrar modificar imagenes imagen guardadas eliminar desde datos convertir con campo almacenadas almacenada php html sql-server sql-server-2005 sql-server-2012

php - subir - Mostrar una imagen almacenada como blob en SQL Server



mostrar imagenes guardadas en base de datos php (1)

Tengo una consulta para buscar imágenes de información:

$q4 = "SELECT TOP 3 b.BadgeName, b.BadgeImage FROM BadgeImageTable AS b INNER JOIN employee_badge AS e ON e.badge_id = b.BadgeID WHERE e.employee_id = 2164 ORDER BY e.earned_on DESC "; $stmt3=sqlsrv_query($conn,$q4); if($stmt3==false){ echo ''error to retrieve info !! <br/>''; die(print_r(sqlsrv_errors(),TRUE)); }

HTML anterior:

<!-- <span class="fa-stack fa-5x has-badge" > <div class="badgesize"> <img src="images/1.png" alt="" > </div> </span> -->

Ahora, en el HTML anterior, intento hacer eco de las imágenes:

<span class="fa-stack fa-5x has-badge" > <div class="badgesize"> <img src=" <?php if($count = sqlsrv_num_rows($stmt3) > 0){ while($recentBadge = sqlsrv_fetch_array($stmt3, SQLSRV_FETCH_ASSOC)){ $result[] = $recentBadge; } if($count > 3){ $result = array_rand($result, 3); } foreach($result as $recentBadge){ echo $recentBadge[''BadgeName''], ''<img src="data:image/png;base64,''.base64_encode($recentBadge[''BadgeImage'']).''"/>'', ''<br>'' ; } } else { echo ''no results''; } ?> " alt="" > </div> </span> </div> </span>

BadgeImage, BadgeID y BadgeName son nombres de columna en "BadgeImageTable" desde donde trato de hacer eco.

cuando uso la consulta en mi DB, obtengo los datos como lo desee. PLz, mira a continuación.

Problema: no puedo hacer eco de la BadgeImage anterior en el html.

Almacena la imagen con la siguiente consulta:

Insert Into BadgeImageTable(BadgeID, BadgeImage) Select ''77'', BulkColumn from Openrowset (Bulk ''C:/Users/mrashidjne/Desktop/diligent.png'', Single_Blob) as Image

actualmente esto es lo que veo cuando trato de hacer eco de la imagen:


Lo único que pude encontrar sobre este tema es que debes buscar la imagen como binario:

while(sqlsrv_fetch($stmt3)){ $result[] = [ ''name'' => sqlsrv_get_field($stmt3, 0), ''img'' => sqlsrv_get_field($stmt3, 1, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_BINARY)) ]; }

Con esto, deberías poder mostrar la imagen:

function blob2image($mime, $blob){ ob_start(); header("Content-type:$mime"); echo $blob; return ob_get_contents(); } $mime = ''image/png''; foreach($result as $row){ echo $row[''name'']; echo ''<img src="data:''.$mime.'';base64,''.base64_encode(blob2image($mime, $row[''img''])).''"/>''; }

No puedo decir con certeza que esto funcione porque no tengo la capacidad de probar y tampoco pude encontrar mucha información sobre este tema.

Una forma alternativa es almacenar la imagen como:

  1. Texto codificado en Base64
  2. Almacenar el camino de la imagen

Cualquiera de los métodos requiere cambiar el tipo de datos de columna de BadgeImage a text para imágenes codificadas o varchar si desea almacenar la ruta.

$file = ''C:/Users/mrashidjne/Desktop/diligent.png''; #$file = ''images/1.png''; // or store path relative to webroot and echo image as normally. $mime = mime_content_type($fn); $img = base64_encode(file_get_contents($fn)); $src = "$data:$mime;base64,$img" $sql = "INSERT INTO BadgeImageTable (BadgeName, BadgeImage) VALUES (''diligent'', ''$src'')";

Ahora, al imprimir, debería ser tan fácil como:

echo ''<img src="''.$row[''BadgeImage''].''"/>'';