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 14 PHP
php magic_quotes_gpc的一点认识与分析
Aug 18 PHP
ThinkPHP php 框架学习笔记
Oct 30 PHP
php 调用远程url的六种方法小结
Nov 02 PHP
PHP 伪静态隐藏传递参数名的四种方法
Feb 22 PHP
php中的常用魔术方法总结
Aug 02 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
Jul 12 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
Sep 20 PHP
CodeIgniter配置之database.php用法实例分析
Jan 20 PHP
PHP面向对象自动加载机制原理与用法分析
Oct 14 PHP
PHP实现微信图片上传到服务器的方法示例
Jun 29 PHP
php使用event扩展的io复用测试的示例
Oct 20 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禁止浏览器使用缓存页面的方法
2014/11/07 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
基于php中echo用逗号和用点号的区别详解
2018/01/23 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
Laravel框架实现即点即改功能的方法分析
2019/10/31 PHP
jQuery页面图片伴随滚动条逐渐显示的小例子
2013/03/21 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
Three.js入门之hello world以及如何绘制线
2017/09/25 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
使用react render props实现倒计时的示例代码
2018/12/06 Javascript
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
使用Python编写vim插件的简单示例
2015/04/17 Python
python实现感知器算法详解
2017/12/19 Python
Python中使用双下划线防止类属性被覆盖问题
2019/06/27 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
使用phonegap进行本地存储的实现方法
2017/03/31 HTML / CSS
html5.2 dialog简介详解
2018/02/27 HTML / CSS
威尔逊皮革:Wilsons Leather
2018/12/07 全球购物
求职信格式范本
2013/11/15 职场文书
2014社区三八妇女节活动总结
2014/03/01 职场文书
2014社区三八妇女节活动方案
2014/03/30 职场文书
家具商场的活动方案
2014/08/16 职场文书
最美乡村教师观后感
2015/06/11 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
pyqt5打包成exe可执行文件的方法
2021/05/14 Python
Golang 语言控制并发 Goroutine的方法
2021/06/30 Golang