如何将BLOB格式的图片转换为可在网页中显示的格式

3

我正在尝试将我插入到网页上显示的 BLOB 数据类型进行转换。

我尝试使用 base64 编码,但它不起作用。

<td> <img src='data:image/jpg;base64,".base64_encode($photo->image)."'/></td> ;

将数据添加到数据库中

echo $imagename=$_FILES["myimage"]["name"]; 

//Get the content of the image and then add slashes to it 
$imagetmp=addslashes (file_get_contents($_FILES['myimage']['tmp_name']));

$photo_image->auditID = $auditID;
$photo_image->critID = $critID;
$photo_image->image = $img;
$photo_image->image_name = $imagename;

$dao->add($photo_image);

从数据库中检索
public  function retrieveName($photo_image) {
        $sql = 'select * from audit_trans_photo where auditID=:auditID and critID=:critID';
        $result = array();

        $connMgr = new ConnectionManager();
        $conn = $connMgr->getConnection();

        $stmt = $conn->prepare($sql);
        $stmt->setFetchMode(PDO::FETCH_ASSOC);
        $stmt->bindParam(':auditID', $photo_image->auditID, PDO::PARAM_INT);
        $stmt->bindParam(':critID', $photo_image->critID, PDO::PARAM_INT);

        $stmt->execute();

        if($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $result = new Audit_Trans_Photo($row['auditID'], $row['critID'], $row['image'], $row['image_name']);
        }

        return $result;
    }

edit-view.php

 $dao3 = new Audit_Trans_PhotoDAO();
 $photo_image = new Audit_Trans_Photo();
 $photo_image->auditID = $auditID;
 $photo_image->critID = $n_transaction->critID;

 $photo  = $dao3->retrieveName($photo_image);
 $image_p = $photo->image;

 echo <td> <img src='data:image/jpg;base64,".base64_encode($photo->image)."'/></td> ;


它只显示一张损坏的图片。

我尝试创建一个新的PHP页面来显示它,但现在当您点击另一个选项卡中的查看时,它显示为黑色图像。 - blueKingdom11
你能发布 $photo->image 字符串吗?我想检查它是否是有效的 base64 编码。 - hs-dev2 MR
/9j/4FwwEEpGSUZcMAEBXDBcMAFcMAFcMFww/9tcMIRcMAkGBxITEhUTExMWFRUVFxUXGBcXFxUVFRUYFhUWFxUVFRcYHSggGBolHRUVITEhJSkrLi4uFx8zODMtNygtLisBCgoKDg0OGxAQGy0lICYtLS0tLS0tLS0tLS0tLS0tLS8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLf/AXDARCFwwtwETAwFcIlwwAhEBAxEB/8RcMBxcMFwwAgIDAQFcMFwwXDBcMFwwXDBcMFwwXDBcMAQFAwZcMAECBwj/xFwwOxBcMAEDAwMCBAQEBQEJAVwwXDBcMAFcMAIRAwQhBRIxQVEGXCJhcRMygZGhscHwFEJSktEjBxUWM2JysuHxov/EXDAaAVwwAwEBAQFcMFwwXDBcMFwwXDBcMFwwXDBcMAECAwRcMAUG/ ... 这样的内容。 - blueKingdom11
3个回答

1

尝试将图像作为array返回。我认为你可以,所以尝试以下操作:

echo '<img src="data:image/jpeg;base64,'.base64_encode( $photo->image['image'] ).'" />';

由于您在此语句中使用了addslashes
$imagetmp = addslashes (file_get_contents($_FILES['myimage']['tmp_name']));

当您像这样显示图像时,必须添加stripslashes

echo '<img src="data:image/jpeg;base64,'.base64_encode(stripslashes($photo->image)).'" />';

而且我没有看到你在任何地方插入$imagetmp。当我检查你的base 64字符串时,它显示了一张损坏的图片。因此我认为你的图片没有正确上传。

1
你从哪里得到这个 $photo->image - Hasitha Jayawardana

0
$db = mysqli_connect("localhost","root","password","yourdbname");
$sql = "SELECT * FROM products WHERE id = $id";
$sqlData = mysqli_query($db, $sql);
$result=mysqli_fetch_array($sqlData);
echo '<img src="data:image/jpeg;base64,'.base64_encode( $result['image'] ).'"/>';

在echo语句中,不要使用“.”来连接字符串,而应该使用逗号。 - Markus Zeller

0

试一下这个

echo '<img src="data:image/jpeg;base64,'.base64_encode($photo->image) .'" />';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接