我有一个通过组合基于数据库数据的图像创建的图像,并且想知道如何将其转换为 base 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="..." />
.
// 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 上的功能代码。
我的功能评论。