<?php
header('Content-type:text/html;charset=utf-8');
function image_base64($image_file) {
// getimagesize获取图片的属性值返回一个数组,索引0对应图片宽度,索引1对应图片高度
/*
* getimagesize获取图片的属性值返回一个数组,这里 $image_info['mime'] 对应的值就是字符串 "image/jpeg"
* 索引 0 给出的是图像宽度的像素值
* 索引 1 给出的是图像高度的像素值
* 索引 2 给出的是图像的类型,返回的是数字,其中1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM
* 索引 3 给出的是一个宽度和高度的字符串,可以直接用于 HTML 的 <image> 标签
* 索引 bits 给出的是图像的每种颜色的位数,二进制格式
* 索引 channels 给出的是图像的通道值,RGB 图像默认是 3
* 索引 mime 给出的是图像的 MIME 信息,此信息可以用来在 HTTP Content-type 头信息中发送正确的信息,如:
* header("Content-type: image/jpeg");
*/
$image_info = getimagesize ( $image_file );
// 组合成base64编码
// chunk_split 将 base64_encode() 的输出转换成符合 RFC 2045 语义的字符串。它会在每 chunklen(默认为 76)个字符后边插入 end(默认为空格 " ")
// 此处不用chunk_split函数处理也行,对于<img>标签显示图像没影响
// 字符串双引号中数组用{}扩起来,即可在字符串中正常显示其中内容
$base64_image = "data:{$image_info['mime']};base64," . chunk_split ( base64_encode ( file_get_contents ( $image_file ) ) );
return $base64_image;
} $image_file = './test.jpg'; $base64_image = image_base64 ( $image_file );
// 获取到的base64码为 data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEBLAEsAAD/4RVFRXhpZgAATU0AKgAAAAgACgEPAA......
?>
<img src="<?php echo $base64_image;?>" /> <?php /**
* 反编译data/base64数据流并创建图片文件
*
* @param string $base64_image base64数据流
* @param string $put_url 存放图片文件目录,路径后不用加斜杠/
* @param string $fileName 图片文件名称(不含文件后缀)
* @return mixed 返回可在浏览器访问的图片地址或布尔类型
*/
function base64DecImg($base64_image, $put_url, $fileName) {
// 浏览器访问当前路径URL
$__URL__ = 'localhost/test/';
try {
// 分割base64码,获取头部编码部分
$headData = explode ( ';', $base64_image );
// 再获取编码前原文件的后缀信息
$postfix = explode ( '/', $headData [0] );
// 判断源文件是否是图片
if (strstr ( $postfix [0], 'image' )) {
// 判断是否是jpeg图片,并赋正确后缀名
$postfix = $postfix [1] == 'jpeg' ? 'jpg' : $postfix [1];
// 拼接要合成图片的完整路径及扩展名
// DIRECTORY_SEPARATOR目录分隔符,由于win与linux目录分隔符不同,PHP根据当前系统返回正确目录分隔符。windows返回\ 或 /,linux返回/
$file_url = $put_url . DIRECTORY_SEPARATOR . $fileName . '.' . $postfix;
// 去掉$base64_image码中头部内容,获取文件编码部分内容
$base64Arr = explode(",",$base64_image);
// 经base64_decode解码
$image_decode = base64_decode ($base64Arr[1] );
try {
// 合成文件
file_put_contents ( $file_url, $image_decode );
// 返回可在浏览器访问的图片地址
return $__URL__ . $file_url;
} catch ( Exception $e ) {
return false;
}
}
} catch ( Exception $e ) {
return false;
}
return false;
}
// ./表示当前页面的所在路径
echo base64DecImg ( $base64_image, "./", "test2" );
?> data:image/*;base64 就是 Data URI scheme。
Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入
例如:
data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEBLAEsAAD/4RVFRXhpZgAATU0AKgAAAAgACgEPAA......
base64码中,data表示取得数据的协定名称,image/jpeg 是数据类型名称,base64 是数据的编码方法,逗号后面就是这个文件base64编码后的数据 目前,Data URI scheme支持的类型有:
data:,文本数据
data:text/plain,文本数据
data:text/html,HTML代码
data:text/html;base64,base64编码的HTML代码
data:text/css,CSS代码
data:text/css;base64,base64编码的CSS代码
data:text/javascript,Javascript代码
data:text/javascript;base64,base64编码的Javascript代码
data:image/gif;base64,base64编码的gif图片数据
data:image/png;base64,base64编码的png图片数据
data:image/jpeg;base64,base64编码的jpeg图片数据
data:image/x-icon;base64,base64编码的icon图片数据
base64简单地说,它把一些 8-bit 数据翻译成标准 ASCII 字符,网上有很多免费的base64 编码和解码的工具

PHP base64的更多相关文章

  1. URL安全的Base64编码

    Base64编码可用于在HTTP环境下传递较长的标识信息.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.此时,采用Base64编码不仅比较简短,同时也具有不可 ...

  2. Base64编码

    Base64编码 写在前面 今天在做一个Android app时遇到了一个问题:Android端采用ASE对称加密的数据在JavaWeb(jre1.8.0_7)后台解密时,居然解密失败了!经过测试后发 ...

  3. Android数据加密之Base64编码算法

    前言: 前面学习总结了平时开发中遇见的各种数据加密方式,最终都会对加密后的二进制数据进行Base64编码,起到一种二次加密的效果,其实呢Base64从严格意义上来说的话不是一种加密算法,而是一种编码算 ...

  4. java单向加密算法小结(1)--Base64算法

    从这一篇起整理一下常见的加密算法以及在java中使用的demo,首先从最简单的开始. 简单了解 Base64严格来说并不是一种加密算法,而是一种编码/解码的实现方式. 我们都知道,数据在计算机网络之间 ...

  5. URI编码解码和base64

    概述 对于uri的编解码,在js中有3对函数,分别是escape/unescape,encodeURI/decodeURI,encodeURIComponent/decodeURIComponent. ...

  6. 通过HTML5的Drag and Drop生成拓扑图片Base64信息

    HTML5 原生的 Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过 ...

  7. Base-64 字符数组或字符串的长度无效等问题解决方案

    项目特殊需要,调用ActiveX三维控件进行控件某一特殊部位的截图操作,这个截图保存由ActiveX控件控制保存到本地是没问题的,现在需要将这个截图上传到服务器,多人共享,就牵扯到需要读取本地文件…… ...

  8. android Base64 加密

    一 Base64加密 import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.OutputStre ...

  9. When I see you again(加密原理介绍,代码实现DES、AES、RSA、Base64、MD5)

    关于网络安全的数据加密部分,本来打算总结一篇博客搞定,没想到东西太多,这已是第三篇了,而且这篇写了多次,熬了多次夜,真是again and again.起个名字:数据加密三部曲,前两部链接如下: 整体 ...

  10. 网络安全——Base64编码、MD5、SHA1-SHA512、HMAC(SHA1-SHA512)哈希

    据说今天520是个好日子,为什么我想起的是502.500.404这些?还好服务器没事! 一.Base64编码 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之 ...

随机推荐

  1. 关于iis8.5中发布的网站无法连接数据库的解决方案。

    发布的网站在浏览时出现如下提示: “/”应用程序中的服务器错误. 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL ...

  2. cocos2dx中的ScrollView

    ScrollView由视窗区域(裁剪区域)和内容区域组成,内容区域叫innerContainer. 视窗区域范围:get/setContentSize 内容区域:get/setInnerContain ...

  3. 几何服务,cut功能,输入要素target(修改前)内容。

    几何服务,cut功能测试,输入要素target(修改前)内容. {"geometryType":"esriGeometryPolyline","geo ...

  4. window系统下,简单的FTP上传和下载操作

    先假设有一FTP服务器,FTP服务器:qint.ithot.net,用户名:username   密码:user1234.在本地电脑D:盘创建一个文件夹"qint".将要上传的文件 ...

  5. sort a Python dictionary by value

    首先要明确一点,Python的dict本身是不能被sort的,更明确地表达应该是"将一个dict通过操作转化为value有序的列表" 有以下几种方法: 1. import oper ...

  6. [原创]Eclipse Mars 在Ubuntu升级后无法工作的解决方法

    近日将自己的Ubuntu从14.04LTS升级到了16.04LTS,顿时发现Eclipse不能正常工作了,到Ubuntu的官网上转了一圈发现以下解决方案: 症状: [1]Eclipse启动很慢; [2 ...

  7. margin重叠现象与margin auto自适应居中

    上下相邻的(算一种兄弟关系)普通元素,上下边距并非简单的相加,而是取其中最大的边距值:而浮动的盒子边距是相加的:父子div也会发生重叠,并不是bug: <style>#test1{ wid ...

  8. div垂直居中

    width:265px; height:130px; display:table-cell; vertical-align:middle; text-align:center;

  9. web前端开发培训和自学 哪种选择更适合你

    web前端相对于其他软件开发是比较容易入门的,但是如果深入学习就比较困难了,这门技能需要从业人员掌握一定的设计.代码.交互技能和一些SEO技能,容易入门还涉及这么多知识和技能,那学习web前端开发到底 ...

  10. 试解析Tomcat运行原理(一)--- socket通讯

    关于这篇文章也确实筹划了很久,今天决定开篇写第一篇,说起tomcat首先很容易联想到IIS,因为我最开始使用的就是.net技术,我第一次使用asp写学生成绩管理系统后,很茫然如何让别人都能看到或者说使 ...