PHP中把图片转换成Base64编码的数据流的方法

  •   
  • 12053
  • PHP
  • 6
  • super_dodo
  • 2015/09/28

在项目开发中,比如一个APP的开机启动图片,因为定期要更换广告信息图。所以这个图片是在后台编辑和修改的。但是对于活跃的用户,每次开启APP的时候都去后台加载或者请求图片,这样网络传输的因素,就会显得很慢,影响体验效果。

比较适中的解决方案是后台返回图片信息以及图片的base64,这样base64就可以存储在app端的本地了。比对一下,取本地base64展示出来即可,不需要再加载服务器端的图片。也就是相当于图片做了本地缓存。

下面直接上代码,建议写一个公共的方法。


//传入图片地址,得到图片的Base64编码
public function img2Base64($img_file){
	$img_base64 = '';			
	$app_dir = dirname(dirname(dirname(__FILE__)));		//根据你的需要得到绝对路径
	$app_img_file = $app_dir.$img_file;					//组合出真实的绝对路径
	$img_info = getimagesize($app_img_file);			//取得图片的大小,类型等
	$fp = fopen($app_img_file,"r");						//图片是否可读权限
	if($fp){
		$file_content = chunk_split(base64_encode(fread($fp,filesize($app_img_file))));//base64编码
		switch($img_info[2]){			//判读图片类型  
			case 1:$img_type="gif";break;  
			case 2:$img_type="jpg";break;  
			case 3:$img_type="png";break;  
		}
		$img_base64 = 'data:image/'.$img_type.';base64,'.$file_content;//合成图片的base64编码  
		fclose($fp); 
	}
	return $img_base64;			//返回图片的base64
}


//调用使用的方法--得到开机界面图片
$img_dir = '/upload/img/201509/11213223.jpg';
$img_base64 = $this->img2Base64($img_dir);
echo $img_base64;			//输出Base64编码
echo '<hr>';
echo '<img src="'.$img_base64.'"'>;		//图片形式展示

温馨提示:关于图片的位置请使用图片的绝对位置,这样是OK滴。使用带http的相对位置会报错 php filesize(): stat failed for ..... 出错是因为相对路径只是文件名,但并不包含文件的绝对路径,所以在调用filesize()等函数时,无法得到文件的绝对路径,就无法读取,从而导致出错。既然这样,那改的时候就指定文件的绝对路径。

我们不木讷,我们期待爱情。