最近寫(xiě)識(shí)別行駛證功能,點(diǎn)擊拍照把指定區(qū)域截取,生成圖片功能。
創(chuàng)新互聯(lián)建站專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、做網(wǎng)站、旺蒼網(wǎng)絡(luò)推廣、小程序開(kāi)發(fā)、旺蒼網(wǎng)絡(luò)營(yíng)銷(xiāo)、旺蒼企業(yè)策劃、旺蒼品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪(fǎng)、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供旺蒼建站搭建服務(wù),24小時(shí)服務(wù)熱線(xiàn):18980820575,官方網(wǎng)址:www.cdcxhl.com
系統(tǒng)相機(jī)。該組件是原生組件,使用時(shí)請(qǐng)注意相關(guān)限制。 掃碼二維碼功能,需升級(jí)微信客戶(hù)端至6.7.3。
微信小程序Camera相機(jī)地址
我們看下效果:
1、首先生成一個(gè)CanvasContext:
/** * 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面加載 */ onLoad: function(options) { requireJs.adaptionIphoneX(this); this.ctx = wx.createCameraContext() },
2、相機(jī)的 wxml樣式
中華人民共和國(guó)機(jī)動(dòng)車(chē)行駛證 (行駛證主頁(yè)) 請(qǐng)對(duì)準(zhǔn)左下角發(fā)證機(jī)關(guān)印章 {{skipphotoStatus==1?"跳過(guò)":""}}
3、相機(jī)的 wxss樣式
.camerabgImage-view{ height: 100%; width: 100%; position:absolute; } .bgImage{ width: 100%; height: 100%; position: absolute; } .cameratop-view1{ margin-top: 174rpx; } .cameratop-view2{ margin-top: 220rpx; } .cameratop-view1, .cameratop-view2{ width: 100%; display: flex; justify-content: center; position: absolute; font-family: PingFangSC-Medium; font-size: 36rpx; color: #FFFFFF; letter-spacing: 0; text-align: center; } .cameracenter-view{ height: 44rpx; width: 100%; position: absolute; font-family: PingFangSC-Medium; font-size: 32rpx; color: #FFFFFF; letter-spacing: 0; text-align: center; } /* 底部 */ .camerabotton-view{ height: 200rpx; width: 100%; position:absolute; display: flex; justify-content: space-around; align-items: center; } .cancelphoto{ width: 50rpx; height: 50rpx; } .takephoto{ width: 132rpx; height: 132rpx; } .skipphoto{ font-family: PingFangSC-Regular; font-size: 32rpx; color: #FFFFFF; letter-spacing: 0; text-align: center; }
4、js 中訪(fǎng)問(wèn)原生組件 camera 主要針對(duì)相機(jī)權(quán)限處理
微信小程序權(quán)限地址
onShow: function() { var that = this wx.authorize({ scope: 'scope.camera', success: function (res) { that.setData({ isShowCamera: true, }) }, fail: function (res) { console.log("" + res); wx.showModal({ title: '請(qǐng)求授權(quán)您的攝像頭', content: '如需正常使用此小程序功能,請(qǐng)您按確定并在設(shè)置頁(yè)面授權(quán)用戶(hù)信息', confirmText: '確定', success: res => { if (res.confirm) { wx.openSetting({ success: function (res) { console.log('成功'); console.log(res); if (res.authSetting['scope.camera']) { //設(shè)置允許獲取攝像頭 console.log('設(shè)置允許獲取攝像頭') wx.showToast({ title: '授權(quán)成功', icon: 'success', duration: 1000 }) that.setData({ isShowCamera: true, }) } else { //不允許 wx.showToast({ title: '授權(quán)失敗', icon: 'none', duration: 1000 }) wx.redirectTo({ url: 'addCarInfo/addCarInfo', }) } } }) } else { //取消 wx.showToast({ title: '授權(quán)失敗', icon: 'none', duration: 1000 }) wx.redirectTo({ url: 'addCarInfo/addCarInfo', }) } } }) } }) },
5、頁(yè)面初始化數(shù)據(jù)
/** * 頁(yè)面的初始數(shù)據(jù) */ data: { isShowCamera: false, width: 10, height: 10, src: "", image: "", skipphotoStatus: "0",// 1跳過(guò) 0沒(méi)有跳過(guò) isShowImage: false },
6、點(diǎn)擊拍照 設(shè)置照片, 返回拍照?qǐng)D片
/** * 拍照 */ takePhotoAction: function() { var that = this that.ctx.takePhoto({ quality: 'high', //高質(zhì)量 success: (res) => { this.loadTempImagePath(res.tempImagePath); }, }) },
7、針對(duì)原圖片截取尺寸 與 截取后的圖片
loadTempImagePath: function(options) { var that = this that.path = options wx.getSystemInfo({ success: function(res) { // 矩形的位置 var image_x = 15; var image_y = 150; var image_width = that.data.width - 2 * 15; var image_height = 238; wx.getImageInfo({ src: that.path, success: function(res) { that.setData({ isShowImage: true, }) that.canvas = wx.createCanvasContext("image-canvas", that) //過(guò)渡頁(yè)面中,圖片的路徑坐標(biāo)和大小 that.canvas.drawImage(that.path, 0, 0, that.data.width, that.data.height) wx.showLoading({ title: '數(shù)據(jù)處理中...', icon: 'loading', duration: 10000 }) // 這里有一些很神奇的操作,總結(jié)就是MD拍出來(lái)的照片規(guī)格居然不是統(tǒng)一的過(guò)渡頁(yè)面中,對(duì)裁剪框的設(shè)定 that.canvas.setStrokeStyle('black') that.canvas.strokeRect(image_x, image_y, image_width, image_height) that.canvas.draw() setTimeout(function() { wx.canvasToTempFilePath({ //裁剪對(duì)參數(shù) canvasId: "image-canvas", x: image_x, //畫(huà)布x軸起點(diǎn) y: image_y, //畫(huà)布y軸起點(diǎn) width: image_width, //畫(huà)布寬度 height: image_height, //畫(huà)布高度 destWidth: image_width, //輸出圖片寬度 destHeight: image_height, //輸出圖片高度 success: function(res) { that.setData({ image: res.tempFilePath, }) //清除畫(huà)布上在該矩形區(qū)域內(nèi)的內(nèi)容。 // that.canvas.clearRect(0, 0, that.data.width, that.data.height) // that.canvas.drawImage(res.tempFilePath, image_x, image_y, image_width, image_height) // that.canvas.draw() wx.hideLoading() console.log(res.tempFilePath); //在此可進(jìn)行網(wǎng)絡(luò)請(qǐng)求 PublicJS.drivinglicenseUpload(res.tempFilePath, that.uploadFile); }, fail: function(e) { wx.hideLoading() wx.showToast({ title: '出錯(cuò)啦...', icon: 'loading' }) if (this.data.skipphotoStatus == 1) { wx.redirectTo({ url: 'addCarInfo/addCarInfo', }) } else { wx.navigateBack({ delta: 1 }); } } }); }, 1000); } }) } }) }, // 接口返回結(jié)果 uploadFile: function(data) {}
微信小程序Canvas畫(huà)布地址
1.canvas組件是由客戶(hù)端創(chuàng)建的原生組件,它的層級(jí)是最高的。
2.請(qǐng)勿在scroll-view中使用canvas組件。
3.css動(dòng)畫(huà)對(duì)canvas組件無(wú)效。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。