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


Posted in PHP onNovember 04, 2019

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 相关文章推荐
PHP中对数据库操作的封装
Oct 09 PHP
php.ini 中文版
Oct 28 PHP
PHP实现自动登入google play下载app report的方法
Sep 23 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
Mar 25 PHP
PHP常用处理静态操作类
Apr 03 PHP
PHP批量生成图片缩略图的方法
Jun 18 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
Feb 15 PHP
PHP CURL post数据报错 failed creating formpost data
Oct 16 PHP
php实现二叉树中和为某一值的路径方法
Oct 14 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
Oct 22 PHP
php的对象传值与引用传值代码实例讲解
Feb 26 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
Mar 09 PHP
详解laravel passport OAuth2.0的4种模式
Nov 04 #PHP
laravel返回统一格式错误码问题
Nov 04 #PHP
php 中self,this的区别和操作方法实例分析
Nov 04 #PHP
PHP 文件写入和读取操作实例详解【必看篇】
Nov 04 #PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
Nov 04 #PHP
php ZipArchive实现多文件打包下载实例
Oct 31 #PHP
Laravel框架实现抢红包功能示例
Oct 31 #PHP
You might like
PHP jQuery表单,带验证具体实现方法
2014/02/15 PHP
Zend Framework教程之Resource Autoloading用法实例
2016/03/08 PHP
php 数组元素快速去重
2017/05/05 PHP
JavaScript让IE浏览器event对象符合W3C DOM标准
2009/11/24 Javascript
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
新发现一个骗链接的方法(js读取cookies)
2012/01/11 Javascript
js判断为空Null与字符串为空简写方法
2014/02/24 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
JS面向对象编程详解
2016/03/06 Javascript
js仿百度登录页实现拖动窗口效果
2016/03/11 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
jquery分页优化操作实例分析
2019/08/23 jQuery
JavaScript实现文件下载并重命名代码实例
2019/12/12 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
Python模拟百度登录实例详解
2016/01/20 Python
用python实现将数组元素按从小到大的顺序排列方法
2018/07/02 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
python绘制雷达图实例讲解
2021/01/03 Python
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
《王二小》教学反思
2014/02/27 职场文书
委托公证书范本
2014/04/03 职场文书
家属慰问信
2015/02/14 职场文书
运动会1000米加油稿
2015/07/21 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
Python打包为exe详细教程
2021/05/18 Python