在项目开发中,比如一个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 '
';
echo ';//图片形式展示
温馨提示:关于图片的位置请使用图片的绝对位置,这样是OK滴。使用带http的相对位置会报错 php filesize(): stat failed for ..... 出错是因为相对路径只是文件名,但并不包含文件的绝对路径,所以在调用filesize()等函数时,无法得到文件的绝对路径,就无法读取,从而导致出错。既然这样,那改的时候就指定文件的绝对路径。
我们不木讷,我们期待爱情。