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

 更新时间:2019年11月04日 14:34:25   作者:斌-逸风   我要评论
在本篇文章里小编给大家整理的是关于PHP保存Base64图片base64_decode的问题,需要的朋友们参考下。

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

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

/**
 * 获取图片的Base64编码(不支持url) *
 * @param $img_file 传入本地图片地址 *
 * @return string
 */
function imgToBase64($img_file) {
  $img_base64 = '';
  if (file_exists($img_file)) {
    $app_img_file = $img_file; // 图片路径
    $img_info = getimagesize($app_img_file); // 取得图片的大小,类型等
    $fp = fopen($app_img_file, "r"); // 图片是否可读权限
    if ($fp) {
      $filesize = filesize($app_img_file);
      $content = fread($fp, $filesize);
      $file_content = chunk_split(base64_encode($content)); // 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 = dirname(__FILE__) . '/uploads/img/wwllwedd.jpg';
$img_base64 = imgToBase64($img_dir);
echo '<img src="' . $img_base64 . '">'; //图片形式展示
echo '<hr>';
echo $img_base64; //输出Base64编码

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

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

以上就是本次介绍的关于PHP保存Base64图片base64_decode的问题内容,感谢大家的学习和对脚本之家的支持。

相关文章

  • php中preg_replace_callback函数简单用法示例

    php中preg_replace_callback函数简单用法示例

    这篇文章主要介绍了php中preg_replace_callback函数简单用法,分析了preg_replace_callback函数的功能及简单使用方法,需要的朋友可以参考下
    2016-07-07
  • PHP实现读取文件夹及批量重命名文件操作示例

    PHP实现读取文件夹及批量重命名文件操作示例

    这篇文章主要介绍了PHP实现读取文件夹及批量重命名文件操作,涉及php目录读取、遍历、转换等相关操作技巧,需要的朋友可以参考下
    2019-04-04
  • PHP迭代与递归实现无限级分类

    PHP迭代与递归实现无限级分类

    这篇文章主要为大家详细介绍了PHP迭代与递归实现无限级分类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • php实现等比例不失真缩放上传图片的方法

    php实现等比例不失真缩放上传图片的方法

    这篇文章主要介绍了php实现等比例不失真缩放上传图片的方法,结合实例形式分析了php基于自定义函数实现等比例不失真缩放上传图片的具体功能定义与使用方法,需要的朋友可以参考下
    2016-11-11
  • 仿AS3实现PHP 事件机制实现代码

    仿AS3实现PHP 事件机制实现代码

    仿AS3实现PHP 事件机制实现代码,需要的朋友可以参考下。
    2011-01-01
  • PHP常用的类封装小结【4个工具类】

    PHP常用的类封装小结【4个工具类】

    这篇文章主要介绍了PHP常用的类封装,结合实例形式分析了4个常用的工具类,包括Mysql类、分页类、缩略图类、上传类,需要的朋友可以参考下
    2019-06-06
  • PHP中的use关键字及文件的加载详解

    PHP中的use关键字及文件的加载详解

    最近有个朋友问我,php中的use关键字是不是会进行文件的自动引入?其实use关键字与文件加载没有一点关系,use关键字的作用就是声明要使用的类所处那个命名空间之下。下面通过这篇文章跟着小编一起学习下PHP中的use关键字及文件的加载。
    2016-11-11
  • PHP分享图片的生成方法

    PHP分享图片的生成方法

    这篇文章主要介绍了PHP分享图片的生成方法,类似淘宝宝贝分享图片功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • php FLEA中二叉树数组的遍历输出

    php FLEA中二叉树数组的遍历输出

    最近在做一个项目其中涉及到“无限级回复”,FLEA中中有一个关于数组的辅助类:FLEA_Helper_Array,这个类里面有一个非常强大的数组处理方法:array_to_tree,这个方法可以把二维数组转换为二叉树结构
    2012-09-09
  • 使用WAMP搭建PHP本地开发环境

    使用WAMP搭建PHP本地开发环境

    这篇文章主要为大家详细介绍了使用WAMP搭建PHP本地开发环境的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05

最新评论