为什么要把图片转为base64编码?
base64是当前网络上最为常见的传输8 Bit字节代码的编码方式其中之一。
base64除了可以用来加密,它还可以把某些二进制数转成普通字符用于网络传输。由于这些二进制字符在传输协议中属于控制字符,不能直接传送,所以需要转换一下。虽然图片可能直接传输,但是我们也可以将它变成字符串直接放在源码里,而不需要浏览器在读取到源码后再从服务器上下载。还有比如截图插件,也会经常转成base64,避免需要先上传到服务器再截图,而是本地就可以先完成,确定截图区域后生成base64代码预览,提交后再保存。就避免了服务器图片垃圾。
早期做网站,如果想把图片保存到数据库,需要转成二进制blob存储。现在也可以转成base64,而且效率更高。
-我通过格式转换工具来查看到源码
-我的
base64
是下图内容
所以,我们如果想要在php
中输出base64
图片,直接这样即可echo '![](.$wxPaySmUrl.)';
/** 把图片转成base64 :如 $img=imgtobase64('images/logo2.png');
* http://www.vephp.com 维易PHP
* @param string $img 图片物理地址
* @param bool $imgHtmlCode 是否转成HTML代码,即:![](...) 默认转化
* @return string
*/
function imgtobase64($img='', $imgHtmlCode=true)
{
$imageInfo = getimagesize($img);
$base64 = "" . chunk_split(base64_encode(file_get_contents($img)));
# file_get_contents可替换为 fread(fopen($img, 'r'), filesize($img));
return $imgHtmlCode? '![]('.$base64.')' : $base64;
}
另外,如果要反向操作也很简单,就是把取到的base64,用base64_decode()函数解码,再用file_put_contents()函数保存成图片即可。可以参考http://www.vephp.com/jiaocheng/54.html summernote在线编辑器提交的内容PHP处理其中图片函数中的处理。