PHP 将文件中制作的图像转换为 base64


PHP convert an image made in the file into base64

我有一个通过基于数据库数据组合图像来创建的图像,并且想知道将其转换为基数 64。我试过这个,但返回的字符无法解码为图像:

$encode ="data:image/png"; 
imagepng($image);
echo (base64_encode($encode));

我看到了这个,但这需要一条我没有的道路。感谢您的任何帮助。

以下内容将允许您获取图像数据而无需创建临时文件(我以前做过临时文件的噩梦,当时有太多用户在线......

ob_start(function($c) {return "data:image/png;base64,".base64_encode($c);});
imagepng($image);
ob_end_flush();

这将输出类似于以下内容的内容:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAAAXNSR0IArs4c6QAAAAxQTFRFAGVygICA/8wz/+aZTn6FEAAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2wkZEwoSgxq4wwAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAS0lEQVQI1w3EMQ3AMAwEwMdTEmWRSF68h0RQBIKl5vkUirdGX99wuKUPKkjJkfM4jueE+ivo7VW6wDCCq1VtEdtiIMY2BGlgwUU+P38ZK+RwskeQAAAAAElFTkSuQmCC

适合在<img src="..." />内使用。

编辑 对于不带匿名函数的 PHP <5.3

// Define the function first
function ob_base64_encode($c) {
  return "data:image/png;base64,".base64_encode($c);
}
// And pass its name as a string
ob_start('ob_base64_encode');
imagepng($image);
ob_end_flush();

您正在编码字符串"data:image/png" - 自然无法将其解码为图像。 假设$image包含有效的图像数据,您应该能够简单地执行

imagepng($image, $temp_file_name);
base64_encode(file_get_contents($temp_file_name));

来自手册:http://php.net/manual/en/function.base64-encode.php#105200

/**
 * Returns base64 encoded string prepended by "data:image/"
 *
 * @param $filename string
 * @param $filetype string 
 * @return string
 */
 function base64_encode_image($filename=string, $filetype=string)
 {
     if ($filename) {
         $imgbinary = fread(fopen($filename, "r"), filesize($filename));
             return 'data:image/' . $filetype 
                    . ';base64,' . base64_encode($imgbinary);
    }
}

卢克在 lukeoliff.com 的函数代码。

我的功能评论。