base64格式的圖片字符串和圖片文件相互轉換的代碼

轉自黎明互聯: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,'路徑/文件名');
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章