使用php打印base64 encripted图像时图像损坏

时间:2015-05-11 08:20:54

标签: php image base64

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

这是我损坏的图片:

Corrupted Image

我的HTML看起来像这样:

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

注意:_encrypteddata_是我的加密图片(我无法在此发布大量数据)

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

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

3 个答案:

答案 0 :(得分:1)

我认为它来自浏览器。

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

尝试使用数据在文件系统上编写图像文件,并在HTML中链接到此文件。它会更快,更强大。

答案 1 :(得分:0)

基本上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);
}

答案 2 :(得分:-2)

我得到了这个解决方案

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

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