使用 php 打印 base64 加密图像时图像损坏

image corrupted when print base64 encripted image using php

我正在将 imagea 加密为 base64,然后将它们存储在数据库中。然后我使用 PHP 打印图像,但有时我会得到损坏的图像。如果我将相同的代码放在 HTML 文件中,或者如果我多次刷新页面,那么它就可以工作。

这是我损坏的图像:

我的 HTML 看起来像这样:

<img src="data:image/png;_encrypteddata_" />

注意:_encrypteddata_是我的加密图片(我不能post这里有那么大的数据)

它工作正常,但有时会显示具有相同数据的连续损坏图像。是浏览器还是base64有问题?

我对所有图标使用 image/png。这会导致任何问题吗?

我认为它来自浏览器。

注意:每次加载页面时从数据库中检索图像数据可能会很慢。

尝试使用数据在您的文件系统上写入图像文件,并将 link 写入您 HTML 中的此文件。它会更快、更健壮。

我得到了这个解决方案

<img src='data:image/;base64,_encrypteddata_'/>

来自http://www.kingpabel.com/php-base64_encode/

基本上 base64 获取大量内存用于存储加密数据,尤其是图像,因此每当您从数据库中获取这么大的数据时,加载都需要一些时间。有时浏览器不会等待太多时间来解密,因此您可能会看到损坏的图像。

您最好将图像存储在本地文件系统中,而不是存储在数据库中。它会加快你的过程。

使用此代码将您的数据存储到本地文件系统

function get_image($image_url, $localPathToStore)
{
    echo $url . "<br>" . $saveto;
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
    $raw = curl_exec($ch);
    curl_close($ch);
    if (file_exists($saveto)) {
        unlink($saveto);
    }
    $fp = fopen($saveto, 'x');
    fwrite($fp, $raw);
    fclose($fp);
}