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 coding standard
Mar 16 PHP
php 无限级数据JSON格式及JS解析
Jul 17 PHP
PHP curl_setopt()函数实例代码与参数分析
Jun 02 PHP
PHP面向对象概念
Nov 06 PHP
PHP无法访问远程mysql的问题分析及解决
May 16 PHP
10条php编程小技巧
Jul 07 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
Zend Framework自定义Helper类相关注意事项总结
Mar 14 PHP
PHP实现类似于C语言的文件读取及解析功能
Sep 01 PHP
php实现表单提交上传文件功能
May 28 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
May 28 PHP
PHP代码覆盖率统计详解
Jul 22 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中const与define的应用区别
2013/06/18 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
yii2缓存Caching基本用法示例
2016/07/18 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
jquery mobile事件多次绑定示例代码
2013/09/13 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
JS 组件系列之BootstrapTable的treegrid功能
2017/06/16 Javascript
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
python实现将汉字转换成汉语拼音的库
2015/05/05 Python
python妙用之编码的转换详解
2017/04/21 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
python集合比较(交集,并集,差集)方法详解
2018/09/13 Python
python 将list转成字符串,中间用符号分隔的方法
2018/10/23 Python
selenium获取当前页面的url、源码、title的方法
2019/06/12 Python
python使用celery实现异步任务执行的例子
2019/08/28 Python
Python整数与Numpy数据溢出问题解决
2019/09/11 Python
Virtualenv 搭建 Py项目运行环境的教程详解
2020/06/22 Python
windows支持哪个版本的python
2020/07/03 Python
实例讲解CSS3中Transform的perspective属性的用法
2016/04/22 HTML / CSS
HTML5 canvas基本绘图之绘制五角星
2016/06/27 HTML / CSS
求职者应聘的自我评价
2013/10/16 职场文书
党章培训心得体会
2014/09/04 职场文书
见习报告的格式
2014/10/31 职场文书
护士个人年度总结范文
2015/02/13 职场文书
2015年六年级班主任工作总结
2015/10/15 职场文书
2019最新公司租房合同(例文)
2019/07/18 职场文书
Nginx缓存设置案例详解
2021/09/15 Servers
手写Spirit防抖函数underscore和节流函数lodash
2022/03/22 Javascript
Python批量解压&压缩文件夹的示例代码
2022/04/04 Python
从原生JavaScript到React深入理解
2022/07/23 Javascript