PHP与base64

摘要:
因为:三个字节有24个位元,就可以刚好对应于4个Base64单元,即3个字节需要用4个Base64的可打印字符来表示。示例----˃将前台传来的被转为base64的字符串转化为图片并存储:functionbase64{ //判断上传文件的大小$filesize=round;  ifreturn'传入图片过大';//将base64字符串中的'/','+'替换成为'_','-',因为PHP中base64的编码只有0-9,a-z,A-Z,'-','_'64种。preg_match)return'不是标准的base64';ifreturn'匹配不完整';if(!in_array)return'传入图片格式不正确';$type=$matches[2];//确定保存文件的地址$basedirmain=$filepath.date.'.'.$type;if(!is_dir)mkdir;//去掉头信息$img=str_replace;//解码$img=base64_decode;//保存if(!

1.形如:"data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA......==" 的字符串就是base64。

2.data:image/jpeg;base64,为头部信息,其余为图片编码。

3.使用base64_decode对编码内容进行解码。

4. 编码后的数据比原始数据略长,为原来的4/3。因为:三个字节有24个位元,就可以刚好对应于4个Base64单元,即3个字节需要用4个Base64的可打印字符来表示。

示例---->将前台传来的被转为base64的字符串转化为图片并存储:

function base64($filestr,$filepath,$MaxSize = 300,$filetype = 'jpeg')

{ 

//判断上传文件的大小

$filesize = round(strlen($filestr)/1024/4*3,1);
  if($filesize > $MaxSize) return '传入图片过大';

//将base64字符串中的'/','+'替换成为'_','-' ,因为PHP中base64的编码只有0-9,a-z,A-Z,'-','_'64种。

$img = str_replace(array('_','-'), array('/','+'), $filestr);

//截取base64字符串的前100个字符,因为字符串太大

$b64img = substr($img, 0, 100);

//正则匹配base64的头信息

if (!preg_match('/^(data:s*image/(w+);base64,)/', $b64img, $matches)) return '不是标准的base64';

if (count($matches) < 3) return '匹配不完整';

if (!in_array($matches[2], $filetype)) return '传入图片格式不正确';

$type = $matches[2];

//确定保存文件的地址

$basedirmain =$filepath.date('YmdHis').'.'.$type;

if (!is_dir($filepath)) mkdir($filepath,0777,true);

//去掉头信息

$img = str_replace($matches[1], '', $img);

//解码

$img = base64_decode($img);

//保存

if (!file_put_contents($basedirmain, $img)) return '传入图片失败';

return$basedirmain;

}

base64的使用

<img src="http://t.zoukankan.com/base64字符串"/>

就可以显示图片

免责声明:文章转载自《PHP与base64》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jquery 事件绑定以及解绑定Mysql 表转换成 Sqlite表下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用 RSA 非对称加密保证数据不被篡改 java 例子代码

原理: 对原始数据 生成有序的json 字符串,然后取 摘要,然后 对摘要 进项 分对称加密。( 不对原数据加密是应为 原数据太大,加解密速度太慢,非对称加密都不 挺慢的。在摘要函数具有雪崩效应 ,原文发生点点的改变都会引起 摘要的剧烈变化 ) 注意事项:因为使用的 对json 排序。而不是 传统的 from 表单方式。虽然 让请求响应都支持了json 变...

点击a标签下载当前链接的图片&amp;amp;&amp;amp;js 通过 blob 类文件对象下载图片,修改图片保存的名字(兼容式写法)

若想点击a标签就下载当前链接的图片,首先必须文件是同源的,在a标签上增加download属性,才能触发点击下载的效果,若不同源的话则变成在当前页面打开该图片了。 若想要下载不同源的文件,有一种思路是将图片转为base64再赋值给a标签,这样点击后应该就能够下载了 问题:通过a标签下载图片,只有谷歌浏览器和火狐浏览器才支持 通过iframe的方式下载图片的时...

使用thumbnailator 时部分图片抛异常

net.coobird.thumbnailator.tasks.UnsupportedFormatException: No suitable ImageReader found for source data. at net.coobird.thumbnailator.tasks.io.InputStreamImageSource.read(U...

妙用python之编码转换

转自i春秋 文章难易度:★★ 知识点:python、编码转换 前 言 在日常渗透,漏洞挖掘,甚至是CTF比赛中,会遇到各种编码,常常伴随着这些编码之间的各种转换。记得刚入门那个时候,自己处理编码转换问题往往是“百度:url解码、base64加密、hex……”,或者是使用一款叫做“小葵多功能转换工具”的软件,再后来直接上Burpsuite的decoder功能...

Java实现BASE64编解码器

Java实现BASE64编解码器 笔者:chszs,转载注明。博客首页:http://blog.csdn.net/chszs BASE64和其它类似的编码算法通经常使用于转换二进制数据为文本数据,其目的是为了简化存储或传输。更详细地说,BASE64算法主要用于转换二进制数据为ASCII字符串格式。 Java语言提供了一个很好的BASE64算法的实现,即A...

微信退款通知信息解密

在最近的开发需求中,有一个需求,就是需要把微信退款通知记录在数据库中,原本以为是一个简单的需求,但是微信文档的坑,是你不能理解的。 在微信退款通知返回的字段中有一个加密信息字段req_info。这个加密字段需要三个解密步骤才能最终获取到信息。由此可见,这个字段是多么的重要。以下是微信官方文档给出的解密步骤: 解密步骤如下: (1)对加密串A做base64解...