先来说一下为什么我们要对图片base64编码

base64是当前网络上最为常见的传输8Bit字节代码的编码方式其中之一。base64主要不是加密,它主要的用途是把某些二进制数转成普通字符用于网络传输。由于这些二进制字符在传输协议中属于控制字符,不能直接传送,所以需要转换一下。虽然图片可能直接传输,但是我们也可以将它变成字符串直接放在源码里,而不需要浏览器在读取到源码后再从服务器上下载。

如何使用PHP对图片进行base64解码输出

<?php
$img = 'test.png';
$base64_img = base64EncodeImage($img); echo '<img src="'.$base64_img.'"/>'; function base64EncodeImage ($image_file) {
$base64_image = '';
$image_info = getimagesize($image_file);
$image_data = fread(fopen($image_file, 'r'), filesize($image_file));
$base64_image = 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data));
return $base64_image;
}
?>

------

PHP对Base64的支持非常好,有内置的base64_encode与base64_decode负责图片的Base64编码与解码。

编码上,只要将图片流读取到,而后使用base64_encode进行进行编码即可得到。

/**
* 获取图片的Base64编码(不支持url)
* @date 2017-02-20 19:41:22
*
* @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); // 取得图片的大小,类型等 //echo '<pre>' . print_r($img_info, true) . '</pre><br>';
$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/11213223.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函数解码会导致最终保存的图片文件格式损坏,而解决方法就是先去掉这一串字符:

$base64_string= explode(',', $base64_string); //截取data:image/png;base64, 这个逗号后的字符
$data= base64_decode($base64_string[1]);  //对截取后的字符使用base64_decode进行解码
file_put_contents($url, $data); //写入文件并保存

而网络远程图片地址转base64,可以用

//网络远程图片地址转base64

$img_u = 'https://common.cnblogs.com/images/wechat.png'; 

$imageInfo = getimagesize($img_u);

$b64 = base64_encode(file_get_contents($img_u));  

echo '<br>';

var_dump($imageInfo);

echo '<br><pre>';

var_dump($b64);

转:

https://www.cnblogs.com/lixihuan/p/7843980.html

https://www.cnblogs.com/cloudshadow/p/php_img_to_base64.html

https://www.cnblogs.com/byuc/p/7600451.html

利用PHP将图片转换成base64编码的实现方法的更多相关文章

  1. Java对网络图片/本地图片转换成Base64编码和解码

    一.将本地图片转换成Base64编码字符串 /** * 将本地图片转换成Base64编码字符串 * * @param imgFile 图片目录路径 * @return */ public static ...

  2. delphi将图片转换成Base64编码函数

    {************************************************************************** 名称: BaseImage 参数: fn: TF ...

  3. 图片转换成Base64编码集成到html文件

    首先为什么要这么做?  原因很简单这样可以减少与服务器的请求,当然对于一些浏览器并不支持,如IE8.通常用在手机版网站中,具体转化方法如下: 1.在线打开Base64的编码器将图片编码成Base64 ...

  4. Base64字符保存图片,图片转换成Base64字符编码

    //文件转换成Base64编码 public static String getFileBase64Str(String filePath) throws IOException { String f ...

  5. java 图片转换成base64字符串

    import java.io.ByteArrayOutputStream; import java.io.FileInputStream;import java.io.FileOutputStream ...

  6. js绝对地址图片转换成base64的方法

    //将图片转换成base64 function getBase64Image(url, callback){ var canvas = document.createElement('canvas') ...

  7. JS将图片转换成Base64码

    直接上代码 html页面代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  8. lua 把图片转换成base64

    调用实例 require("ZZBase64") local files local file = io.open("E:\\2342.jpg","r ...

  9. 图片文件转换成Base64编码实现ajax提交图片

    //上传头像图片 function uploadHead(imgPath) { console.log("imgPath = " + imgPath); var image = n ...

随机推荐

  1. 微信公开课厦门站 时尚行业专场PPT

    做为一位开发者,ytkah有幸参加了微信公开课厦门站-时尚行业专场,见证了微信支付的发展历程,小程序产品的实力简介,感受了一下与各位高手共聚一堂的氛围,当然还近距离接触了著名主持人兼NPC潮品(与潘玮 ...

  2. 【环境配置】配置jdk

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/manoel/article/details/37736569 1. 下载jdk的安装文件 http: ...

  3. iOS开发swift语法0基础篇—————(swift技术交流群:361513739)

    iOS开发之swift语法0基础篇:点击打开链接  swift技术交流QQ群361513739

  4. 报错解决——make: *** No targets specified and no makefile found. Stop

    wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.6.tar.gz tar zxvf ncurses-5.6.tar.gz #切换目录到ncurses ...

  5. MySQL 5.7 Replication 相关新功能说明 (转)

    背景: MySQL5.7在主从复制上面相对之前版本多了一些新特性,包括多源复制.基于组提交的并行复制.在线修改Replication Filter.GTID增强.半同步复制增强等.因为都是和复制相关, ...

  6. 版本控制之GitHub亲手实验总结

        使用Git的基本方式是:第一种,在remote端创建一个repository,clone到本地,然后在本地把已有文件添加进来/在本地clone的目录下创建新文件,再add 提交等纳入git版本 ...

  7. 282A

    #include <iostream> #include <string> using namespace std; int main() { int n, plus, sub ...

  8. git pull和push冲突

    http://blog.csdn.net/matrix_laboratory/article/details/18034509 问题描述 1 有人改动了 文件A.java,提交到git 2 我没有pu ...

  9. Python小数据池,代码块

    今日内容一些小的干货 一. id is == 二. 代码块 三. 小数据池 四. 总结 python小数据池,代码块的最详细.深入剖析   一. id is == 二. 代码块 三. 小数据池 四. ...

  10. DataFrame.nunique(),DataFrame.count()

    1. nunique() DataFrame.nunique(axis = 0,dropna = True ) 功能:计算请求轴上的不同观察结果 参数: axis : {0或'index',1或'co ...