最近接到一个微信公众好的开发需求,拍照识别二维码并上传,踩了不少坑。有需要的小伙伴可以看看。还附有各种文件转化的方法,可以马克一下。

欢迎和我一起探讨交流~

file文件的拷贝和改名

// 复制文本域中的file文件并重命名
let myFile = new File([file], "新文件的名字"]);
复制代码复制代码

bolb格式转base64格式

function blobToDataURL(blob, callback) {let reader = new FileReader();reader.onload = function () { callback(reader.result); }reader.readAsDataURL(blob);
}
复制代码复制代码

file格式转base64格式

function blobToDataURL(file, callback) {let reader = new FileReader();reader.onload = function () { callback(reader.result); }reader.readAsDataURL(file);
}
复制代码复制代码

base64格式的文件转blob格式

//将base64转换为blob
function dataURLtoBlob(dataURL) {let arr = dataURL.split(',');let mime = arr[0].match(/:(.*?);/)[1];let bstr = atob(arr[1]);let n = bstr.length;let u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new Blob([u8arr], { type: mime });
}
复制代码复制代码

base64格式的文件转file格式

//将base64转换为blob
function dataURLtoFile(dataURL, filename) {let arr = dataURL.split(',');let mime = arr[0].match(/:(.*?);/)[1];let bstr = atob(arr[1]);let n = bstr.length;let u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new File([u8arr], `${filename}.jpg`, { type: mime });
}
复制代码复制代码

通过 ajax 请求图片转base64格式

let url = "当前域的xx图片地址";
let xhr = new XMLHttpRequest();
xhr.open("get", url, true);
xhr.responseType = "blob";
xhr.onreadystatechange = function() {if (xhr.readyState == 4 && xhr.status == 200 || xhr.status == 304) {let reader = new FileReader();reader.readAsDataURL(xhr.response);reader.onloadend = function(){let base64data = reader.result;}}
}
xhr.send();
复制代码复制代码

通过img和canva获得base64格式的图片

function getImgToBase64(url, callback){let canvas = document.createElement('canvas');let ctx = canvas.getContext('2d');let img = new Image;img.crossOrigin = 'Anonymous';img.onload = function(){canvas.height = img.height;canvas.width = img.width;ctx.drawImage(img,0,0);var dataURL = canvas.toDataURL('image/jpg');     callback(dataURL);canvas = null;};img.src = url;
}
复制代码复制代码

file转blob格式,blob格式转file

// file转blob
let blob = new Blob([file], {type: mimeType})
// Blob转file
let file = new File([blob], name, {type: mimeType})
复制代码复制代码

微信sdk拍照识别二维码并上传

// 需要提前调用wx.config初始化,这里就不展示了,然后调用微信拍照接口
wx.chooseImage({count: 1, // 默认9sizeType: ['compressed'], // 可以指定是原图还是压缩图,默认二者都有sourceType: ['camera'], // 可以指定来源是相册还是相机,默认二者都有'album', 'camera'success: res => {// 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片var localId = res.localIds[0];wxGetLocalImgData(localId);},fail: res => {},cancel: res => {}
});
function wxGetLocalImgData(localId) {wx.getLocalImgData({localId: localId, // 图片的localIDsuccess: res =>  {// localData是图片的base64数据,可以用img标签显示// 如果是Android,需要增加base64的前缀let localData = res.localData;localData = window.__wxjs_is_wkwebview ? localData.replace('jgp', 'jpeg') : 'data:image/jpeg;base64,' + localData;// 这里已经拿到base64的文件了,可以做你想要的转换上传,也可以在这里识别二维码// 识别二维码需要用到一个库qrcode// 改造下,利用es6的模块方式引入qrcode.decode(dataUrl);qrcode.callback = (qrUrl) => {if (qrUrl === 'error decoding QR Code') {console.log('二维码解析异常,请重新拍照')} else {console.log(qrUrl)// 你的上传方法upload(localData);}}},fail: res => {}
}

复制代码

转微信拍照并识别二维码和前端各种类型文件的转换

前端各种类型文件的转换相关推荐

  1. react将前端Blob类型文件传到后台

    react将前端Blob类型文件传到后台 最近在做一个关于语音识别的功能,具体需求是用户在线录制音频提交给后台,后台转写成文字输出txt文本.我使用的是一个第三方类库recordmp3.js,可以录制 ...

  2. 自学Python第二十二天- Django框架(三) AJAX、文件上传、POST 请求类型之间的转换、多APP开发、iframe、验证码、分页器、类视图、中间件、信号、日志、缓存、celery异步

    Django官方文档 django 使用 AJAX django 项目中也可以使用 ajax 技术 前端 前端和其他 web 框架一样,需要注意的是,django 接收 POST 请求时,需要 csr ...

  3. 前端下载 “不支持打开该类型文件或文件已损坏“问题

    最开始做下载功能的时候,是模仿项目中已有的写法来实现的,这套模板应该可以适应大多数的下载,网上很多也是这种写法: .then(res => {// res 为调用后端下载接口返回的值const ...

  4. 关于Java项目中,word和Excel类型文件的预览功能实现

    关于Java项目中,word和Excel类型文件的预览功能实现 背景 Aspose说明 Aspose.Words Aspose.Cells pom依赖引入 引入license.xml(授权文件) 创建 ...

  5. swift文件服务器,Swift3一行代码将各种类型文件上传到服务器

    由于之前一直在忙项目,很久没有写过一篇像样的文章了,现在手上的项目基本是完成了,正好工作时间偷个懒写两篇文章. 将相机或相册图片上传到服务器 先看看最常见的图片上传,也可以选择跳过,后面有直接的封装方 ...

  6. 格式工厂mac版_格式工厂无广告版,支持PDF文件的转换

    点击上方"蓝字",发现更多精彩.软件信息[名称]:格式工厂无广告版[安装环境]:win10/win8/win7[下载链接]:https://pan.baidu.com/s/1r5_ ...

  7. 使用PHP读取和创建txt,doc,xls,pdf类型文件

    使用PHP读取和创建txt,doc,xls,pdf类型文件 PHP读取或者创建txt,doc,xls,pdf各个类型文件的方法. php读取(文本.txt)文件: 一般是使用fopen.fgets的方 ...

  8. java xml文件内容替换_java读取xml文件并转换成对象,并进行修改

    1.首先要写工具类,处理读取和写入xml文件使用的工具.XMLUtil.java importjava.io.FileInputStream;importjava.io.FileWriter;impo ...

  9. python程序把文件编码转换

    # -*- coding: utf-8 -*- import os import shutil import re import sys ''' 功能:将一个文件夹中的指定类型的文件从gb2312或g ...

最新文章

  1. 万人马拉松赛事,人脸识别系统如何快速、准确完成校验?
  2. AttributeError: module 'tensorflow_core.estimator' has no attribute 'inputs'
  3. 就挺凡尔赛的!李开复谈20年后的AI,崔宝秋论开源之道,清华唐杰的PPT成了“香饽饽” | MEET2021智能未来大会...
  4. 编译问题收集、汇总与积累
  5. 【杂谈】有三AI季划的最核心价值在哪,听听这些同学怎么说!
  6. c#图片base64去转义字符_C#实现字符串与图片的Base64编码转换操作示例|chu
  7. libpng error: Not a PNG file
  8. Zoom惊人财报、传苹果打造搜索引擎与谷歌竞争、Netflix部分剧集免费以吸引新用户等| Decode the Week...
  9. flink-jdbc-driver和flink-sql-gateway的作用
  10. 【ArcGIS风暴】ArcGIS快捷键大全
  11. 产品经理和程序员之间的“潜台词”,你能听懂多少?
  12. 【飞控理论】四旋翼飞行器控制原理
  13. 如何在Linux命令行中替换多个文件中的字符串
  14. 2014蓝桥杯:李白打酒;奇怪的分式(枚举,最大公约数)
  15. java 绘制动态波形图6,折线图波形图绘制(动态绘制,实时变化)
  16. 如何用通俗易懂的语言解释需求变更带来的项目影响
  17. nodejs+vue++Elementui漫画赏析网站系统源码
  18. 用React实现基于Canvas的图片放大镜功能
  19. 调用微信扫一扫接口---实现二维码扫描(微信浏览器)
  20. Win7系统文件上添加Sublime Text 3的打开方式

热门文章

  1. python不断刷新网页_python使用多线程不断刷新网页的方法
  2. python对外发布的时间_Python如何进行时间处理
  3. 基于EEG的脑机接口中的安全性问题
  4. 从软件到数件,AI生态如何建立自己的“Android”?天云数据CEO直播详解,可预约 | 量子位·视点...
  5. 这个新型AI电子器件没有硅!北航32岁教授共同一作,能模拟大脑神经元,还登上了Science...
  6. 免费试用人数太多,微软Windows 365云电脑服务器炸了,官方紧急暂停
  7. 赶上直播电商、在线教育、小程序直播的风口 腾讯音视频解决方案助力
  8. 七年终登Science封面:最强大脑皮层神经网络重建,揭示迄今哺乳动物最大神经线路图...
  9. 图森无人车官宣D轮2.15亿美元融资,成卡车货运估值No.1
  10. 用PyTorch实现的李沐《动手学深度学习》,登上GitHub热榜,获得700+星