PHP(swoole)生成二维码并添加网络图片做背景图,然后上传base64格式图片到七牛
第一次写博客,直接上代码,主要也是给自己记录一下
生成二维码、获取网络背景图片并合并
$bg = '这里是网络图片地址'; // 邀请好友背景图
$image_1 = imagecreatefrompng($bg);
$value = 'https://yikan.cdhhtc.cn/#/login/login/reg?phone=13689610664'; //二维码内容
$errorCorrectionLevel = 'L'; //容错级别
$matrixPointSize = 4; //生成图片大小
//生成二维码图片
require_once DIR.'/vendor/phpqrcode/phpqrcode.php'; // 加载phpqrcode类
ob_start();//开启缓冲区
$qrcode = new \QRcode();
$res = $qrcode::png($value,false,$errorCorrectionLevel,$matrixPointSize,2);
$imageString = base64_encode(ob_get_contents());
ob_end_clean();
$res = "data:image/jpg;base64,".$imageString;
$image_2 = imagecreatefrompng($res);
imagecopymerge($image_1, $image_2, 10, 200, 0, 0, imagesx($image_2), imagesy($image_2), 100); // 合并图片
ob_start (); // 开启缓冲区
//$image_1是你自己创建的图片资源
imagepng ($image_1);
$image_data = ob_get_contents (); // 获取缓冲区内容
ob_end_clean (); // 清除缓冲区
//得到这个结果,可以直接用于前端的img标签显示
$image_data_base64 = "data:image/png;base64,". base64_encode ($image_data);
$upd='七牛信息的json字符串';
$config=json_decode($upd,true); // 解析成数组
$qiniu = new Qiniu($config); // 实例化七牛对象,并将配置内容数组传过去
$upimg = $qiniu -> uploadPicBase64($image_data_base64); // 调用七牛上传base64方法
$upimg = $config['domain'].'/'.$upimg; // 得到最终七牛地址
七牛文件关键方法:
/**
* 上传base64位图片到七牛云
* $image base64位图片流
*/
public function uploadPicBase64($image)
{
// 去除base64,
$num = strpos($image,',');
$image = substr($image, $num+1);
$str= isset($image)?$image:false;
//生成图片key
$rand = rand(1111,9999);
$now = time();
$name = 'ycode_'.$now.$rand.'.png';
$Key = base64_encode($name);
$upToken = $this->uploadToken();
if($str) {
$qiniu = $this->phpCurlImg('https://upload.qiniu.com'."/putb64/-1/key/".$Key,$str,$upToken);
//upload.qiniup.com 上传域名适用于华东空间。华北空间使用 upload-z1.qiniu.com,华南空间使用 upload-z2.qiniu.com,北美空间使用 upload-na0.qiniu.com。
$qiniuArr = json_decode($qiniu,true);
if(!empty($qiniuArr['key'])&&$qiniuArr['key']==$name) {
return $qiniuArr['key'];
}
else {
return false;
}
}
return false;
}
//七牛base64上传方法
public function phpCurlImg($remote_server,$post_string,$upToken) {
$headers = array();
$headers[] = 'Content-Type:application/octet-stream';
$headers[] = 'Authorization:UpToken '.$upToken;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$remote_server);
curl_setopt($ch, CURLOPT_HTTPHEADER ,$headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
参考文章:https://blog.csdn.net/qq_34415586/article/details/82840050
另一个合并图片的记不到了。。