PHP與base64
1.形如:"data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA......==" 的字符串就是base64。
2.data:image/jpeg;base64,爲頭部信息,其餘爲圖片編碼。
3.使用base64_decode對編碼內容進行解碼。
4. 編碼後的數據比原始數據略長,爲原來的4/3。因爲:三個字節有24個位元,就可以剛好對應於4個Base64單元,即3個字節需要用4個Base64的可打印字符來表示。
示例---->將前臺傳來的被轉爲base64的字符串轉化爲圖片並存儲:
function base64($filestr,$filepath,$MaxSize = 300,$filetype = 'jpeg')
{
//判斷上傳文件的大小
$filesize = round(strlen($filestr)/1024/4*3,1);
if($filesize > $MaxSize) return '傳入圖片過大';
//將base64字符串中的 '/','+'替換成爲 '_','-' ,因爲PHP中base64的編碼只有0-9,a-z,A-Z,'-','_'64種。
$img = str_replace(array('_','-'), array('/','+'), $filestr);
//截取base64字符串的前100個字符,因爲字符串太大
$b64img = substr($img, 0, 100);
//正則匹配base64的頭信息
if (!preg_match('/^(data:\s*image\/(\w+);base64,)/', $b64img, $matches)) return '不是標準的base64';
if (count($matches) < 3) return '匹配不完整';
if (!in_array($matches[2], $filetype)) return '傳入圖片格式不正確';
$type = $matches[2];
//確定保存文件的地址
$basedirmain = $filepath.date('YmdHis').'.'.$type;
if (!is_dir($filepath)) mkdir($filepath,0777,true);
//去掉頭信息
$img = str_replace($matches[1], '', $img);
//解碼
$img = base64_decode($img);
//保存
if (!file_put_contents($basedirmain, $img)) return '傳入圖片失敗';
return $basedirmain;
}
base64的使用
<img src="base64字符串"/>
就可以顯示圖片