生成小程序二维码(二进制数据流转图片存储上传七牛)
公司项目小程序分享海报需要太阳码、基于这一点去看了下小程序码文档。
文档提供了三个方法,可根据项目场景选择适合的。
一. 小程序码
1、生成小程序码的前提需要拿到 access_token
官方给的接口:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
2、 生成小程序码:POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN
通过上面的方法会直接返回图片二进制内容,但是前端如果需要处理成海报那就不太友好了,所以需要后端处理一下,最好返回一个静态资源地址。
下面具体说一下怎么处理这个二进制图片,下面封装的代码我也会贴出来。
二. 处理二进制
1、二进制转base64
/* 二进制转图片image/png*/
//$contents 二进制图片 $mime 'image/jpeg'
public function data_uri($contents, $mime)
{
$base64 = base64_encode($contents);
return 'data:' . $mime . ';base64,' . $base64;
}
2、上传七牛云(二进制文件生成本地文件:base64Upload,由本地上传到七牛云)
public function base64ToOss($base64){
$result = $this->base64Upload($base64);
if ($result['code'] != 200) {
return ['code' => $result['code'], 'msg' => $result['msg']];
}
$fileResult = &$result['data'];
$filePath = '/upload/image/' . $fileResult['name'];
// $filePath = $fileResult['path'] . $fileResult['name'];
$ossFileName = implode('/', ['upload/image', $fileResult['name']]);
try {
//上传七牛
$arr = $this->uploadQiniu($ossFileName,$filePath);
} catch (\Exception $e) {
return ['code' => 400, 'msg' => $e->getMessage()];
} finally {
unlink('.'.$filePath);
}
return ['code' => 200, 'info' => $arr];
}
下面是生成本地文件的方法
public function base64Upload($base64, $path = '')
{
// dd($base64);;
$data = explode(',', $base64);
unset($base64);
if (count($data) !== 2) {
return ['code' => 400, 'msg' => '文件格式错误'];
}
if (preg_match('/^(data:\s*image\/(\w+);base64)/', $data[0], $result)) {
$type = $result[2];
if (!in_array($type, array('jpeg', 'jpg', 'gif', 'bmp', 'png'))) {
return ['code' => 400, 'msg' => '文件格式不在允许范围内'];
}
$image_name = md5(uniqid()) . '.' . $result[2];
$image_path = "./upload/image/";
$image_file = $image_path . $image_name;
if (!file_exists($image_path)) {
mkdir($image_path, 777, true);
}
//服务器文件存储路径
if (file_put_contents($image_file, base64_decode($data[1])) == true) {
return ['code' => 200, 'msg' => '成功', 'data' => ['name' => $image_name, 'path' => $image_path]];
} else {
return ['code' => 400, 'msg' => '文件保存失败'];
}
}
return ['code' => 400, 'msg' => '文件格式错误'];
}
以及传七牛的方法
前提是你需要先运行:
composer require zgldh/qiniu-laravel-storage
public function uploadQiniu( $img, $filename)
{
$disk = QiniuStorage::disk('qiniu'); //使用七牛云上传
$res = $disk->put($filename, file_get_contents($img));//上传
\Log::info('二维码 七牛上传', [$res]);
$filepath = env('QINIU_DOMAIN', 'http://qiniu-photo.jinshouping.com') .$filename;
return $filepath;
}
以上就是拿到小程序太阳码生成静态地址的方法。多多交流。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: