当前位置:首页 > PHP教程 > php应用 > 列表

PHP保存Base64图片base64_decode的问题整理

发布:smiling 来源: PHP粉丝网  添加日期:2022-01-21 20:14:58 浏览: 评论:0 

在本篇文章里小编给大家整理的是关于PHP保存Base64图片base64_decode的问题,需要的朋友们参考下。

PHP对Base64的支持非常好,有内置的base64_encode与base64_decode负责图片的Base64编码与解码。

编码上,只要将图片流读取到,而后使用base64_encode进行进行编码即可得到。

  1. /** 
  2.  * 获取图片的Base64编码(不支持url) * 
  3.  * @param $img_file 传入本地图片地址 * 
  4.  * @return string 
  5.  */ 
  6. function imgToBase64($img_file) { 
  7.   $img_base64 = ''
  8.   if (file_exists($img_file)) { 
  9.     $app_img_file = $img_file// 图片路径 
  10.     $img_info = getimagesize($app_img_file); // 取得图片的大小,类型等 
  11.     $fp = fopen($app_img_file"r"); // 图片是否可读权限 
  12.     if ($fp) { 
  13.       $filesize = filesize($app_img_file); 
  14.       $content = fread($fp$filesize); 
  15.       $file_content = chunk_split(base64_encode($content)); // base64编码 
  16.       switch ($img_info[2]) {      //判读图片类型 
  17.         case 1: $img_type = "gif"
  18.           break
  19.         case 2: $img_type = "jpg"
  20.           break
  21.         case 3: $img_type = "png"
  22.           break
  23.       } 
  24.       $img_base64 = 'data:image/' . $img_type . ';base64,' . $file_content;//合成图片的base64编码 
  25.     } 
  26.     fclose($fp); 
  27.   } 
  28.   return $img_base64//返回图片的base64 
  29. //调用使用的方法 
  30. $img_dir = dirname(__FILE__) . '/uploads/img/wwllwedd.jpg'
  31. $img_base64 = imgToBase64($img_dir); 
  32. echo '<img src="' . $img_base64 . '">'//图片形式展示 
  33. echo '<hr>'
  34. echo $img_base64//输出Base64编码 

而解码就略微麻烦一点,究其原因在于把图片编码成base64字符串后,编码内会加入这些字符 data:image/png;base64,本来是用于base64进行识别的。但是如果直接放到php里用base64_decode函数解码会导致最终保存的图片文件格式损坏,而解决方法就是先去掉这一串字符

  1. //方法一 
  2. preg_match('/^(data:\s*image\/(\w+);base64,)/'$base_info$result// 可以判断是否是 base64的图片 
  3. $type = $result[2]; 
  4. $extensions = strtolower($type); 
  5. if (!in_array($extensionsarray('gif''jpg''png''jpeg','bmp'))) { 
  6.   json_rtn(0, '上传的图片不在允许内'); 
  7. $database64_decode(str_replace($result[1], ''$base_info));  //对截取后的字符使用base64_decode进行解码 
  8. file_put_contents($pic_path,$data//写入文件并保存 
  9.    
  10. //方法二 
  11. $base64_stringexplode(','$base64_string); //截取data:image/png;base64, 这个逗号后的字符 
  12. $database64_decode($base64_string[1]);  //对截取后的字符使用base64_decode进行解码 
  13. file_put_contents($url$data); //写入文件并保存

Tags: Base64 base64_decode

分享到: