在移动端上传图片的时候通常会将图片转换成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,'路径/文件名');