一、前言:
相信很多微信小程序开发者在使用微信授权头像的时候,会发现授权得的临时图片特别模糊,以下教大家如何改善和解决图片模糊问题
二、方案流程:
1、用户授权图片后,把用户头像上传至服务器
2、微信小程序端通过图片上传接口把图片传给服务器,
3、服务器通过微信官方高清图片接口,把图片进行高清化,服务器通过接口返回给前端
4、微信小程序端把返回的高清图片进行一系列的操作
三、解决方案:
3.1、小程序端:放置获取头像按钮
<button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
<image class="avatar" src="{{avatarUrl}}"></image>
</button> 3.2、前端js接收并获取头像,并执行wx.uploadFile({})图片上传操作
const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'
Page({
data: {
avatarUrl: defaultAvatarUrl,
},
onChooseAvatar(e) {
const { avatarUrl } = e.detail
var that = this
// console.log(avatarUrl)
// 上传图片
wx.showLoading({
title: '加载中',
})
wx.uploadFile({
url: app.AppUrl +'/minwxapi/superresolution', //仅为示例,非真实的接口地址
filePath: avatarUrl,
name: 'file',
formData: {
'path': 'photo'
},
success (res){
wx.hideLoading()
var data = JSON.parse(res.data)
console.log(data.data)
if(data.code==200){
//图片返回成功,进行一系列操作
that.setData({
avatarUrl: data.data
})
}
}, error:async function() {
wx.hideLoading()
}
})
}
})3.3、后端代码处理-图片上接口:
<?php
namespace App\Http\Controllers\Weixin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Http\Response\ApiErrDesc;
use App\Http\Response\ResponseJson;
use Illuminate\Support\Facades\Storage;
public function superresolution(Request $request){
$tmp = $request->file; //文件
$folder = $request->path; //文件存放地址
$path = '/static/ups'; //public下的ups
if ($tmp->isValid()) { //判断文件上传是否有效
$FileType = $tmp->getClientOriginalExtension(); //获取文件后缀
$FilePath = $tmp->getRealPath(); //获取文件临时存放位置
$FileName = $folder.'/'.date('Ymd').'/' . uniqid() . '.' . $FileType; //定义文件名
Storage::disk('Uploads')->put($FileName, file_get_contents($FilePath)); //存储文件
$result = $this->gaoqing('https://www.tpxhm.com'.$path.'/'.$FileName, $path.'/'.$FileName);
return $data = [
'code' => ApiErrDesc::UPLOAD_SUCCESS[0],
'msg' =>ApiErrDesc::UPLOAD_SUCCESS[1] ,
'data'=>'https://www.tpxhm.com'.$result //文件路径
];
}else{
return $data = [
'code' => ApiErrDesc::UPLOAD_ERROR[0],
'msg' =>ApiErrDesc::UPLOAD_ERROR[1] ,
'data'=>[]
];
}
}
?>3.4、后端代码处理-高清化上接口:
3.4.1、获取小程序全局唯一后台接口调用凭据,token:getAccessToken
GET https://api.weixin.qq.com/cgi-bin/token
3.4.2、处理小程序的图片高清化:(图片支持使用img参数实时上传,也支持使用img_url参数传送图片地址,由微信后台下载图片进行识别。 目前支持将图片超分辨率高清化2倍,即生成图片分辨率为原图2倍大小)官方文档:superResolution接口
POST https://api.weixin.qq.com/cv/img/superresolution?access_token=ACCESS_TOKEN
代码示例:
<?php
// 高清图片
public function gaoqing($fileUrl,$filepath){
$appId = Env('JYZY_APPID');
$secret = Env('JYZY_SECRET');
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appId.'&secret='.$secret;
$res = $this->curlRequest($url);
$access_token = json_decode($res,true);
$access_token = $access_token['access_token'];
// dd($access_token);
$url2 = 'https://api.weixin.qq.com/cv/img/superresolution?access_token='.$access_token;
$data = [
'img_url'=> $fileUrl
];
$result = $this->curlRequest($url2,$data);
$result = json_decode($result, true);
if($result['errcode']==0){
$url3 = "https://api.weixin.qq.com/cgi-bin/media/get?access_token=".$access_token."&media_id=".$result['media_id'];
$result3 = $this->curlRequest($url3);
// $data = file_get_contents($result3);
$savePath = public_path().$filepath;
$done = file_put_contents($savePath, $result3);
if($done){
return $filepath;
}
}
}
/**
* 使用curl方式实现get或post请求
* @param $url 请求的url地址
* @param $data 发送的post数据 如果为空则为get方式请求
* return 请求后获取到的数据
*/
public function curlRequest($url, $data = '')
{
$ch = curl_init();
$params[CURLOPT_URL] = $url; //请求url地址
$params[CURLOPT_HEADER] = false; //是否返回响应头信息
$params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回
$params[CURLOPT_FOLLOWLOCATION] = true; //是否重定向
$params[CURLOPT_TIMEOUT] = 30; //超时时间
if (!empty($data)) {
$params[CURLOPT_POST] = true;
$params[CURLOPT_POSTFIELDS] = $data;
}
$params[CURLOPT_SSL_VERIFYPEER] = false;//请求https时设置,还有其他解决方案
$params[CURLOPT_SSL_VERIFYHOST] = false;//请求https时,其他方案查看其他博文
curl_setopt_array($ch, $params); //传入curl参数
$content = curl_exec($ch); //执行
curl_close($ch); //关闭连接
return $content;
}
?>以上就是新版小程序获取用户头像信息模糊问题解决方案,供大家参考和使用,有更多更好的方法欢迎下方留言评论。
Demo示例:

关于简忆
简忆诞生的故事



粤ICP备16092285号
文章评论(0)