thinkphp将二进制流格式的图片转换成base64格式

浏览:9757 发布日期:2018/03/16 分类:功能实现
我的实现逻辑是:
①读取数据库二进制流格式的图片信息,
②将该二进制流转换成图片,存在临时文件里,
③然后获取图片路径,将该图片转换成base64格式的编码,
④拿着base64格式编码,就可以直接在页面上显示了,
⑤利用代码删除临时图片

ps:
①不要问我为什么要把图片直接存在数据库,领导说的,没解释,哈哈
②我考虑过直接将二进制流显示在页面上,但是失败了,
③我考虑过直接将二进制流转换成base6
下图是整体实现过程,很简单:

下图是将二进制流变化成图片:

代码:
/**
* @name 将二进制流变化成图片
* @Author: 岳晓通
* @ $imgs 二进制流格式的图片
* @ $new_file 返回的是图片的路径
* @data 2018年3月14日 15:18:27
*/
public function change_picture($imgs){
$path="./uploads/temporary/";
if(!is_dir($path)){
mkdir($path);
}
$new_file = "./uploads/temporary/" . time().".jpg"; //生成图片的名字
if(!empty($imgs)){
$file = fopen($new_file,"w");//打开文件准备写入
fwrite($file,$imgs);//写入
fclose($file);//关闭
}
return $new_file;
}
下图是将图片转换成base64格式的编码:

代码:
/**
* @name 将图片转换成base64编码
* @Author: 岳晓通
* @ $image_file 这个是图片的路径
* @ $base64_image 返回的是base64格式图片的编码
* @data 2018年3月14日 15:18:27
*/
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;
}

下图是删除临时图片的方法:

代码:
/**
* @name 删除thinkphp目录
* @Author: 岳晓通
* @data 2018年3月14日 15:18:27
*/
function delDirAndFile($path, $delDir = true) {
if (is_array($path)) {
foreach ($path as $subPath)
delDirAndFile($subPath, $delDir);
}
if (is_dir($path)) {
$handle = opendir($path);
if ($handle) {
while (false !== ( $item = readdir($handle) )) {
if ($item != "." && $item != "..")
is_dir("$path/$item") ? delDirAndFile("$path/$item", $delDir) : unlink("$path/$item");
}
closedir($handle);
if ($delDir)
return rmdir($path);
}
} else {
if (file_exists($path)) {
return unlink($path);
} else {
return FALSE;
}
}
clearstatcache();
}

ok,拿着base64格式的编码,在页面上输出就可以了,

来俩张效果图吧,

下图是打印出来的base64格式的编码:


下图是显示效果:
评论( 相关
后面还有条评论,点击查看>>