PHP base64

<?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 编码和解码的工具
时间: 2024-10-02 19:14:58

PHP base64的相关文章

gulp教程(sass,livereload,md5,css压缩,js压缩,img的base64)

环境 node -v  v6.10.3 npm -v  3.10.10 package.json如下: { "name": "zhcsdata", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": &

PHP_EOL换行 与 base64编码

base64编码包括64个字符:10个数字(0-9),26*2个字母(a-zA-Z),+,\ 其中还有一个第65个字符=作为后缀,没有实际作用. 来一段代码说明个问题: 1 <?php 2 3 $str = '1234567'; 4 5 $en = base64_encode($str);// MTIzNDU2Nw== 6 7 $en = 'MTIzND U 8 9 2Nw=========='; 10 11 echo base64_decode($en);// 1234567 可以看到,即使修

[C语言]Base64编码解码

Base64编码解码 一,Base64编码原理 Base64编码的字符数组如下所示 : ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ 字符串转Base64编码:取3字节的字符串转换为四字节的字符串,依次往后转换.得到Base64编码字符串.具体原理如下: 1,如果需要编码的原串字节数刚好为3的倍数,那么转换规则如下: 以中文字符'严'为例,'严'字的UTF-8编码为:0xE4B8A5 = 11100100  10

【前端攻略】:玩转图片Base64编码(转)

引言 图片处理在前端工作中可谓占据了很重要的一壁江山.而图片的Base64编码可能相对一些人而言比较陌生,本文不是从纯技术的角度去讨论图片的base64编码.标题略大,不过只是希望通过一些浅显的论述,让你知道什么是图片的base64编码,为什么我们要用它,我们如何使用并且方便的使用它,并让你懂得如何去在前端的实际工作中运用它. 什么是base64编码? 我不是来讲概念的,直接切入正题,图片的base64编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址. 这样做有什么意义呢?我

base64 编码

转载自网络 (一)java自带的加密和解密 import sun.misc.BASE64Decoder; public class Base64Utils {  public static String getBASE64(byte[] b) {  String s = null;  if (b != null) {   s = new sun.misc.BASE64Encoder().encode(b);  }  return s; }  public static byte[] getFro

使用HTML5的File实现base64和图片的互转

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

PHP base64数据与图片的互相转换

1.解析base64数据成图片 The problem is that data:image/bmp;base64, is included in the encoded contents. This will result in invalid image data when the base64 function decodes it. Remove that data in the function before decoding the string, like so. $base64

JAVA 将图片转换为Base64编码

这里使用的jar包是commons-codec-1.10.jar; 示例代码 1 import java.io.FileInputStream; 2 import java.io.FileOutputStream; 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 7 import org.apache.commons.codec.binary.Base64;

springmvc结合base64存取图片到mysql

简介: 1.jsp通过MultipartFile上传图片到后台 2.后台把上传的图片通过base64转换成字符串存到mysql 3.从mysql读取图片字符串,通过base64反转成byte数组,再显示到jsp 1.mysql表结构 2.影射对象 package net.spring.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; impor

js 图片压缩 转成base64

HTML: <!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>测试</title> <link rel=&qu