轉自黎明互聯:base64格式的圖片字符串和圖片文件相互轉換的代碼.
在移動端上傳圖片的時候通常會將圖片轉換成base64格式的字符串提交,所以此時需要使用服務器端的程序進行轉換成二進制的數據。如下PHP代碼實現了圖片文件和base64格式的圖片字符串相互轉換的方法,同時保證了圖片字符串轉圖片文件時數據類型的問題,進行了簡單的封裝,使用時可根據實際情況進行修改。具體查看如下代碼:
class Img
{
/**
@param $base64Str base64格式的圖片字符串數據
@param $path 保存的文件路徑和文件名(不用帶擴展名 自動匹配)
*/
function base64ToImg($base64Str,$path){
$arr = explode(',',$base64Str);
$bin = base64_decode($arr[1]);
$ext = $this->getImgExt($bin);//獲取真實擴展名
if($ext !== false){
file_put_contents($path . '.' . $ext,$bin);
}else{
exit('圖片格式非法');
}
}
/*
圖片文件轉base64格式的圖片字符串
@param $img_file 圖片路徑和文件名
return 圖片字符串
*/
function imgToBase64($img_file){
$img_info = getimagesize($img_file);
$img_src = "data:{$img_info['mime']};base64," . base64_encode(file_get_contents($img_file));
return $img_src;
}
/**
獲取圖片文件的擴展名 如果不是圖片數據則返回false
@param $bin 二進制圖片數據流
return 圖片擴展名
*/
public function getImgExt($bin){
$bits = array(
'jpg' => "\xFF\xD8\xFF",
'gif' => "GIF",
'png' => "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a",
'bmp' => 'BM',
);
foreach ($bits as $type => $bit) {
if (substr($bin, 0, strlen($bit)) === $bit) {
return $type;
}
}
return false;
}
}
$obj = new Img();
$str = '這裏是base64格式的字符串';
$obj->base64ToImg($str,'路徑/文件名');