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环境搭建最新方法
Sep 05 PHP
打造计数器DIY三步曲(上)
Oct 09 PHP
PHP原理之异常机制深入分析
Aug 08 PHP
php自动加载机制的深入分析
Jun 08 PHP
java模拟PHP的pack和unpack类
Apr 13 PHP
php使用pdo连接sqlite3的配置示例
May 27 PHP
php array_values 返回数组的所有值详解及实例
Nov 12 PHP
php中输出json对象的值(实现方法)
Mar 07 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 PHP
PHP中的自动加载操作实现方法详解
Aug 06 PHP
laravel5表单唯一验证的实例代码
Sep 30 PHP
解决Laravel 不能创建 migration 的问题
Oct 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
CI框架中zip类应用示例
2014/06/17 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
2019/04/10 PHP
JS 常用校验函数
2009/03/26 Javascript
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
JS中showModalDialog 的使用解析
2013/04/17 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
2015/09/16 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
小试小程序云开发(小结)
2019/06/06 Javascript
vue登录注册实例详解
2019/09/14 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
vue.js+element 默认提示中英文操作
2020/11/11 Javascript
跟老齐学Python之坑爹的字符编码
2014/09/28 Python
Python算法应用实战之栈详解
2017/02/04 Python
Python使用django搭建web开发环境
2017/06/09 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
python SVM 线性分类模型的实现
2019/07/19 Python
django将数组传递给前台模板的方法
2019/08/06 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
python实现批量转换图片为黑白
2020/06/16 Python
运动会100米解说词
2014/01/23 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
活动倡议书范文
2014/05/13 职场文书
档案信息化建设方案
2014/05/16 职场文书
公司委托书怎么写
2014/08/02 职场文书
擅自离岗检讨书
2014/09/12 职场文书
2014小学语文教学工作总结
2014/12/17 职场文书
新学期开学寄语2016
2015/12/04 职场文书
六五普法学习心得体会
2016/01/21 职场文书
python 详解turtle画爱心代码
2022/02/15 Python
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/06 PostgreSQL
SQL Server表分区降低运维和维护成本
2022/04/08 SQL Server
排查并解决Oracle sysaux表空间异常增长
2022/04/20 Oracle