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与php MySQL 之间的关系
Jul 17 PHP
php设计模式 Prototype (原型模式)代码
Jun 26 PHP
深入php处理整数函数的详解
Jun 09 PHP
php加密解密实用类分享
Jan 07 PHP
Destoon实现多表查询示例
Aug 21 PHP
php返回json数据函数实例
Oct 09 PHP
php操纵mysqli数据库的实现方法
Sep 18 PHP
分享PHP-pcntl 实现多进程代码
Sep 30 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
Feb 13 PHP
Yii框架日志操作图文与实例详解
Sep 09 PHP
TP5框架实现签到功能的方法分析
Apr 05 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
Aug 17 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
laravel 5 实现模板主题功能(续)
2015/03/02 PHP
PHP图像处理类库MagickWand用法实例分析
2015/05/21 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
PHP实现浏览器中直接输出图片的方法示例
2018/03/14 PHP
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
jquery BS,dialog控件自适应大小
2009/07/06 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
js省市联动效果完整实例代码
2015/12/09 Javascript
jQuery 移动端拖拽(模块化开发,触摸事件,webpack)
2016/10/28 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
2016/12/29 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
jQuery.cookie.js实现记录最近浏览过的商品功能示例
2017/01/23 Javascript
对vue.js中this.$emit的深入理解
2018/02/23 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
JavaScript进阶(三)闭包原理与用法详解
2020/05/09 Javascript
python将文本转换成图片输出的方法
2015/04/28 Python
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
Python使用pymysql小技巧
2017/06/04 Python
Python实现随机选择元素功能
2017/09/14 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
Python中的类与类型示例详解
2019/07/10 Python
python基础 range的用法解析
2019/08/23 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
python 实现按对象传值
2019/12/26 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
港湾网络笔试题
2014/04/19 面试题
管理站站长岗位职责
2013/11/27 职场文书
二年级学生评语大全
2014/04/23 职场文书
2015年学校少先队工作总结
2015/07/20 职场文书
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers
Win2008系统搭建DHCP服务器
2022/06/25 Servers