思路:将图片base64值转换生成图片文件并保存,将图片保存路径转换成二维码。
二维码的生成使用了phpqrcode类
增加了一个删除的操作,传入开始和结束日期,删除该范围内生成的图片及二维码
<?php
//包含一个文件上传类中的上传类
header('Content-Type: text/html; charset=utf-8');
$content = file_get_contents("php://input");
$content = json_decode($content,true);
$type = $content['type'];
$errcode = 0;
$errtext = "";
$myJson = array();
$savepath = 'static/upload/'; //保存base64图片目录
$qrpath = 'static/qrcode/'; //生成下载地址二维码图片的目录
if(!$type)
$errtext = "error param";
if($errtext == ""){
switch ($type) {
case 'upload':
$base64 = $content['base64'];
$correctimg = base64_image_content($base64,$savepath);
if($correctimg){
$saveurl ='http://'.$_SERVER['HTTP_HOST'].$correctimg;
if($saveurl){
$qrimg = scerweima($saveurl);
$mybase64 = base64EncodeImage($qrimg);
$myJson['mybase64'] = $mybase64;
}
}else{
$errtext="error image base64 format";
}
break;
case 'delete':
$start =date('Ymd',strtotime($content['start']));
$end = date('Ymd',strtotime($content['end']));
for($i=$start;$i<=$end;$i++){
$savefile = $savepath.$i."/";
$qrfile = $qrpath.$i."/";
if(file_exists($savefile)){
//删除保存图片的文件夹
deldir($savefile);
}
if(file_exists($qrfile)){
//删除二维码图片的文件夹
deldir($qrfile);
}
}
break;
default:
$errtext = "unkonw type";
break;
}
}
if($errtext !='')
$errcode = 1;
$myJson['errcode'] = $errcode;
$myJson['errtext'] = $errtext;
echo json_encode($myJson);
/**
* [将Base64图片转换为本地图片并保存]
* @param [Base64] $base64_image_content [要保存的Base64]
* @param [目录] $path [要保存的路径]
*/
function base64_image_content($base64_image_content,$path)
{
//匹配出图片的格式
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){
$type = $result[2];
$pathname = date('Ymd',time());
$filename = time();
$new_file = $path.$pathname."/";
if(!file_exists($new_file)){
//检查是否有该文件夹,如果没有就创建,并给予最高权限
mkdir($new_file, 0700,true);
}
$new_file = $new_file.$filename.".{$type}";
if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_image_content)))){
return '/'.$new_file;
}else{
return false;
}
}else{
return false;
}
}
/**
* 生成二维码图片
* @param url 链接
* return 返回生成的二维码地址
*/
function scerweima($url=''){
require_once './class/phpqrcode/phpqrcode.php';
$value = $url; //二维码内容
$errorCorrectionLevel = 'L'; //容错级别
$matrixPointSize = 5; //生成图片大小
//生成二维码图片
$qrname = time();
$docpath = $GLOBALS['qrpath'].date('Ymd',time());
if(!file_exists($docpath)){
//检查是否有该文件夹,如果没有就创建,并给予最高权限
mkdir($docpath, 0700,true);
}
$filename = $docpath.'/'.$qrname.'.png';
QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
$QR = $filename; //已经生成的原始二维码图片文件
$QR = imagecreatefromstring(file_get_contents($QR));
imagedestroy($QR);
return $docpath.'/'.$qrname.'.png';
}
/**
* 将图片转换为base64
* @param image_file 图片文件
* return base64_image 返回转换后的base64值
*/
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;
}
/**
* 删除文件夹
* @param path 文件夹目录
*/
function deldir($path){
if(is_dir($path)){
//扫描一个文件夹内的所有文件夹和文件并返回数组
$p = scandir($path);
foreach($p as $val){
//排除目录中的.和..
if($val !="." && $val !=".."){
//如果是目录则递归子目录,继续操作
if(is_dir($path.$val)){
//子目录中操作删除文件夹和文件
deldir($path.$val.'/');
//目录清空后删除空文件夹
@rmdir($path.$val.'/');
}else{
//如果是文件直接删除
unlink($path.$val);
}
}
}
}
}