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 相关文章推荐
4.与数据库的连接
Oct 09 PHP
MYSQL环境变量设置方法
Jan 15 PHP
php横向重复区域显示二法
Sep 25 PHP
php设计模式 Composite (组合模式)
Jun 26 PHP
zend Framework中的Layout(模块化得布局)详解
Jun 28 PHP
ThinkPHP验证码使用简明教程
Mar 05 PHP
Windows下编译PHP5.4和xdebug全记录
Apr 03 PHP
php实现对象克隆的方法
Jun 20 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
Feb 25 PHP
PHP基于GD2函数库实现验证码功能示例
Jan 27 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
May 02 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
将数字格式的计算结果转为汉字格式
2006/10/09 PHP
php地址引用(php地址引用的效率问题)
2012/03/23 PHP
PHP eval函数使用介绍
2013/12/08 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
2014/07/15 PHP
php如何实现只替换一次或N次
2015/10/29 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
2017/11/20 PHP
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
jQuery实现tab标签自动切换的方法
2015/02/28 Javascript
完善的jquery处理机制
2016/02/21 Javascript
sso跨域写cookie的一段js脚本(推荐)
2016/05/25 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
[43:47]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第一场 12.09
2020/12/11 DOTA
详解Python中列表和元祖的使用方法
2015/04/25 Python
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
利用python库在局域网内传输文件的方法
2018/06/04 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
对Python _取log的几种方式小结
2019/07/25 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
Python使用jupyter notebook查看ipynb文件过程解析
2020/06/02 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
NET程序员上机面试题
2015/05/23 面试题
《赠汪伦》教学反思
2014/04/12 职场文书
授权委托书
2014/07/31 职场文书
父亲节活动策划方案
2014/08/24 职场文书
2015年街道除四害工作总结
2015/05/15 职场文书
Python+uiautomator2实现自动刷抖音视频功能
2021/04/29 Python
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python
MySQL去除重叠时间求时间差和的实现
2021/08/23 MySQL