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函数
Dec 06 PHP
PHP setcookie() cannot modify header information 的解决方法
Jan 09 PHP
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
Oct 29 PHP
php更改目录及子目录下所有的文件后缀的代码
Sep 24 PHP
PHP获取url的函数代码
Aug 02 PHP
PHP使用SOAP调用.net的WebService数据
Nov 12 PHP
php实现把url转换迅雷thunder资源下载地址的方法
Nov 07 PHP
thinkphp模板赋值与替换实例简述
Nov 24 PHP
PHP中new static() 和 new self() 的区别介绍
Jan 09 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
Dec 02 PHP
php 可变函数使用小结
Jun 12 PHP
PHP中抽象类,接口功能、定义方法示例
Feb 26 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过滤危险html代码的函数
2008/07/22 PHP
php读取html并截取字符串的简单代码
2009/11/30 PHP
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
php实现向javascript传递数组的方法
2015/07/27 PHP
PHP实现的下载远程文件类定义与用法示例
2017/07/05 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
js使用eval解析json实例与注意事项分享
2014/01/18 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
2015/10/31 Javascript
延时加载JavaScript代码提高速度
2015/12/27 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
AngularJS动态绑定HTML的方法分析
2016/11/07 Javascript
Angular的$http与$location
2016/12/26 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
微信小程序之滚动视图容器的实现方法
2017/09/26 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
js变量值传到php过程详解 将php解析成数据
2019/06/26 Javascript
VUE实现移动端列表筛选功能
2019/08/23 Javascript
Python实现网站文件的全备份和差异备份
2014/11/30 Python
Python的迭代器和生成器
2015/07/29 Python
Python3中的列表生成式、生成器与迭代器实例详解
2018/06/11 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
Python 编程速成(推荐)
2019/04/15 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
全球在线商店:BerryLook
2019/04/14 全球购物
主要的Ajax框架都有什么
2013/11/14 面试题
2016新年致辞
2015/08/01 职场文书
写作技巧:优秀文案必备的3种结构
2019/08/19 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
Python 阶乘详解
2021/10/05 Python