我使用base64_encode
将一些图片保存到mysql数据库中。
现在我想将它们还原回文件系统。
我该怎么做?
编辑...!
好的,我没有解释清楚。
我使用此代码对我的图像进行编码并将其保存到blob表中:
function base64_encode_image ($imagefile) {
$imgtype = array('jpg', 'gif', 'png');
$filename = file_exists($imagefile) ? htmlentities($imagefile) : die('Image file name does not exist');
$filetype = pathinfo($filename, PATHINFO_EXTENSION);
if (in_array($filetype, $imgtype)){
$imgbinary = fread(fopen($filename, "r"), filesize($filename));
} else {
die ('Invalid image type, jpg, gif, and png is only allowed');
}
return 'data:image/' . $filetype . ';base64,' . base64_encode($imgbinary);
}
并使用此代码在浏览器中显示我的图片:
if (!isset($_GET['id']) && !ctype_digit($_GET['id'])){
die('Error');
} else {
require_once( addslashes(dirname(dirname(__FILE__)) . '/config.php') );
require_once( addslashes(dirname(__FILE__) . '/Functions.php'));
$row = mysql_fetch_array(mysql_query ("SELECT `id`,`cover_small` FROM `om_manga` WHERE `Active` = '1' AND `id` = '".sql_quote($_GET['id'])."'"));
if (isset($row['id'])){
header("Content-type: image/jpeg");
readfile($row['cover_small']);
} else {
die('Error');
}
}
现在我希望他们回到jpg文件。
所有这些图像的大小都小于3kb。
答案 0 :(得分:3)
使用PHP的base64_decode()函数将编码数据转换回二进制文件。
由于base64_decode返回一个字符串,您可以使用file_put_contents()将已解码的内容写入文件。
这让我想知道为什么你要存储图像base64编码,如果你没有以那种格式使用它。您可以轻松地将图像以二进制格式存储在二进制blob列中。
Base64编码增加了33%的字符开销(而不是字节)。
编辑修改后的问题
你的第二个问题的答案是主观的,没有背景。在不知道系统细节的情况下,我不建议您是否应该提取图像。
答案 1 :(得分:2)
以与编码相同的方式对其进行解码...
base64_decode()
您可能希望在将图像写入数据库时存储图像的文件扩展名,以便您可以准确地还原它。只需将新名称与现有扩展名连接即可。 你应该这样的东西是这样的:
// Retrieved values from database
$encodedImg = $sqlResult['encoded_img'];
$ext = $sqlResult['encoded_img_ext'];
// Concatenate new file name with existing extention
// NOTE : This parameter is a full path. Make sure that the folder
// you are writing the file to has the correct permissions allowing the
// script write access.
$newImagePath = "/some/path/on/the/servers/filesystem/";
$newImageName = $newImagePath."decoded_image.".$ext;
// Saving the decoded file with the new file name.
file_put_contents($newImageName, base64_decode($encodedImg));