PHP:Base64文件流转图片

以下功能主要用于前端将图片Base64加密后,后端将接收到的文件流转换成图片存储到服务器上,其实也完全可以不存储原始图片文件,而保存文件流本身。但后者不是本篇讨论内容,以下是该功能源码。

PHP源码:

  1. function saveBase64Image($base64_image_content,$image_path){
  2.     if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content$result)){
  3.         //图片后缀
  4.         $type = $result[2];
  5.         if($type=='jpeg'){
  6.             $type='jpg';
  7.         }
  8.         //保存位置--图片名
  9.         $image_name=date('His').str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT).".".$type;
  10.         //$image_path = '/static/upload/quanzi/'.$memberid.'/image/';文件路径格式
  11.         $image_url = $image_path.$image_name;
  12.         if(!is_dir(ROOT_PATH.$image_path)){
  13.             mkdir(ROOT_PATH.$image_path,0755,true);
  14.         }
  15.         //解码
  16.         $decode=base64_decode(str_replace($result[1], ''$base64_image_content));
  17.         if (file_put_contents(ROOT_PATH.$image_url$decode)){
  18.             $data['code']='0';
  19.             $data['imageName']=$image_name;
  20.             $data['image_url']=$image_url;
  21.             $data['type']=$type;
  22.             $data['msg']='保存成功!';
  23.         }else{
  24.             $data['code']='1';
  25.             $data['imgageName']='';
  26.             $data['image_url']='';
  27.             $data['type']='';
  28.             $data['msg']='图片保存失败!';
  29.         }
  30.     }else{
  31.         $data['code']='1';
  32.         $data['imgageName']='';
  33.         $data['image_url']='';
  34.         $data['type']='';
  35.         $data['msg']='base64图片格式有误!';
  36.     }
  37.     return $data;
  38. }

文件上传是项目中常用的功能,所以上述分享只是其中一个轮子,不见得适用所有情况,根据自己需要选择吧。不过这个上传用起来还是蛮爽的。波波测试一个4.18M的图片(现在手机拍照一般都比较大),通过前端的压缩和转换后仅剩58K,清晰度基本上没有失真。对于用户而言也丝毫感觉不出来图片上传的延迟。用户体验度是最高的。建议收藏下。

前端图片压缩可以用html5ImgCompress.min.js。具体用法可自行百度。

波波

发表评论

您必须 登录 才能发表留言!