it-swarm.com.de

Anzeigen von Base64-Bildern aus einer Datenbank über PHP

Ich habe diese Datenbank, die Bilder als Zeichenfolgen enthält. Diese Zeichenfolgen sehen ungefähr so ​​aus:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD...

Ich muss einen Link erstellen, der dieses Bild anzeigt. Wie something.com/?id=27 ist ein Bild. Alle Bilder sind im JPEG-Format. Folgendes habe ich versucht, aber nicht funktioniert:

<?php
  $Host = "smth";
  $user = "smth";
  $pass = "smth";
  $db_name = "smth";
  $dbh = new PDO("mysql:Host=$Host;dbname=$db_name", $user, $pass);
  $dbh->exec("SET NAMES utf8");
  $q = $dbh->prepare("select content from img where id = :id");
  $q->execute(array(':id'=>$_GET['id']));
  $row = $q->fetch(PDO::FETCH_BOTH);
  header("Content-type: image/jpeg");
  echo $row['content'];
?>

Die Daten werden korrekt abgerufen, das Bild wird jedoch nicht angezeigt.

Ich muss in der Lage sein, diesen Link wie folgt zu verwenden: <img src="mysite.com?id=21" /> und ich möchte diese Lösung NICHT: <img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABA..." />

Vielen Dank!

12

Die Lösung für Ihr Problem ist hier:

So dekodieren Sie einen base64-String (gif) in ein Bild in PHP/HTML

Quellcode zitieren, aber ändern:

Wenn Sie den ersten Fall entfernen und die Zeichenfolge dekodieren möchten, sollten Sie dies vor dem Echo der dekodierten Bilddaten hinzufügen:

header("Content-type: image/gif");
$data = "/9j/4AAQSkZJRgABAQEAYABgAAD........";
echo base64_decode($data);

Im zweiten Fall verwenden Sie stattdessen Folgendes:

echo '<img src="data:image/gif;base64,' . $data . '" />';

Der zweite Fall ist schlecht, weil der Browser keine Zwischenspeicherung durchführt, wenn dasselbe Bild auf mehreren Seiten angezeigt wird.

24

Benutze das: 

$code_base64 = $row['content'];
$code_base64 = str_replace('data:image/jpeg;base64,','',$code_base64);
$code_binary = base64_decode($code_base64);
$image= imagecreatefromstring($code_binary);
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
2
Ashkan Arefi

versuche dies

//your image data

$logodata = "/9j/4AAQSkZJRgABAQEAYABgAAD........";
echo '<img src="data:image/gif;base64,' . $logodata . '" />';
2

Versuche dies:

echo '<img src="data:image/png;base64,' . $base64encodedString . '" />
0
Mahbub Alam
/**
* @param $base64_image_content 
* @param $path 
* @return bool|string
*/
function base64_image_content($base64_image_content,$path){
  if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){
    $type = $result[2];
    $new_file = $path."/".date('Ymd',time())."/";
    $basePutUrl = C('UPLOAD_IMG_BASE64_URL').$new_file;

    if(!file_exists($basePutUrl)){
        //Check if there is a folder, if not, create it and grant the highest authority.
       mkdir($basePutUrl, 0700);
    }
       $ping_url = genRandomString(8).time().".{$type}";
       $ftp_image_upload_url = $new_file.$ping_url;
       $local_file_url = $basePutUrl.$ping_url;

   if (file_put_contents($local_file_url, base64_decode(str_replace($result[1], '', $base64_image_content)))){
     ftp_upload(C('REMOTE_ROOT').$ftp_image_upload_url,$local_file_url);
         return $ftp_image_upload_url;
    }else{
         return false;
    }
  }else{
     return false;
 }
}
0
Ryan Horace