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+DBM的同学录程序(3)
Oct 09 PHP
php getimagesize 上传图片的长度和宽度检测代码
May 15 PHP
PHP 数组和字符串互相转换实现方法
Mar 26 PHP
php遍历所有文件及文件夹的方法深入解析
Jun 08 PHP
php设计模式之命令模式使用示例
Mar 02 PHP
php获取远程文件的内容和大小
Nov 03 PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 PHP
PHP 7.1新特性的汇总介绍
Dec 16 PHP
PHP实现的二分查找算法实例分析
Dec 19 PHP
php实现统计二进制中1的个数算法示例
Jan 23 PHP
PHP中md5()函数的用法讲解
Mar 30 PHP
PHP数组array类常见操作示例
May 15 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+AJAX实现无刷新注册(带用户名实时检测)
2006/12/02 PHP
深入php socket的讲解与实例分析
2013/06/13 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
php组合排序简单实现方法
2016/10/15 PHP
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
JSON 和 JavaScript eval使用说明
2010/06/13 Javascript
jquery插件如何使用 jQuery操作Cookie插件使用介绍
2012/12/15 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
javascript动态创建及删除元素的方法
2014/12/22 Javascript
Node.js编写组件的三种实现方式
2016/02/25 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
深入理解Angular中的依赖注入
2017/06/26 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
微信小程序canvas实现刮刮乐效果
2018/07/09 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
Python堆排序原理与实现方法详解
2018/05/11 Python
Python range、enumerate和zip函数用法详解
2019/09/11 Python
python 实现dict转json并保存文件
2019/12/05 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
Python函数式编程实例详解
2020/01/17 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
Python3读取和写入excel表格数据的示例代码
2020/06/09 Python
Pycharm及python安装详细教程(图解)
2020/07/31 Python
瑞典首都斯德哥尔摩的多元奢侈时尚品牌:Acne Studios
2017/07/09 全球购物
英国最大的在线蜡烛商店:Candles Direct
2019/03/26 全球购物
销售冠军获奖感言
2014/02/03 职场文书
宿舍违规用电检讨书
2014/02/16 职场文书
我的中国心演讲稿
2014/09/04 职场文书
2014年班组长工作总结
2014/11/20 职场文书
生产现场禁烟通知
2015/04/23 职场文书