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 session 预定义数组
Mar 16 PHP
sphinx增量索引的一个问题
Jun 14 PHP
Php中文件下载功能实现超详细流程分析
Jun 13 PHP
基于php验证码函数的使用示例
May 03 PHP
解析PHP自带的进位制之间的转换函数
Jun 08 PHP
Thinkphp中import的几个用法详细介绍
Jul 02 PHP
PHP实现无限极分类图文教程
Nov 25 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
Jun 29 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
Apr 07 PHP
php简单获取复选框值的方法
May 11 PHP
为你的 Laravel 验证器加上多验证场景的实现
Apr 07 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
Aug 30 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字符串的连接的简单实例
2013/12/30 PHP
浅谈PHP匿名函数和闭包
2019/03/08 PHP
php数组遍历类与用法示例
2019/05/24 PHP
JS解密入门 最终变量劫持
2008/06/25 Javascript
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
2013/04/28 Javascript
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
js confirm()方法的使用方法实例
2013/07/13 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
2013/12/17 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
Python构建图像分类识别器的方法
2019/01/12 Python
谈谈Python中的while循环语句
2019/03/10 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
python Canny边缘检测算法的实现
2020/04/24 Python
Python logging模块原理解析及应用
2020/08/13 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
Python环境使用OpenCV检测人脸实现教程
2020/10/19 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
CSS3使用多列制作瀑布流
2016/05/10 HTML / CSS
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
Lancome兰蔻官方旗舰店:来自法国的世界知名美妆品牌
2018/06/14 全球购物
关于运动会的广播稿50字
2014/10/17 职场文书
学历证明样本
2015/06/16 职场文书
通讯稿格式及范文
2015/07/22 职场文书
2016新年致辞
2015/08/01 职场文书
干部考核工作总结
2015/08/12 职场文书
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers