本篇文章給大家分享的是有關(guān)怎么在小程序中實現(xiàn)一個圖片預(yù)覽裁剪插件,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

修水網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
wxml:
<canvas hidden='{{hide_canvas}}' id='cover-preview' bindtouchstart='canvas_start' bindtouchmove='canvas_move' bindtouchend='canvas_end' disable-scroll='true' canvas-id='cover-preview'>
<cover-view catchtap='upload_bg' id='croper-sure'>確定</cover-view>
<cover-view catchtap='cancel_croper' id='croper-cancel'>取消</cover-view>
<cover-view id='croper'></cover-view>
</canvas>注意:canvas里面一定要用cover-view,否則無法覆蓋canvas
js:
const ctx = wx.createCanvasContext('cover-preview');
var start_position = {};//移動圖片時手指起始坐標
var tempFilePath;//圖片路徑
var tempWidth;//圖片初始寬度
var tempHeight;//圖片初始高度
var old_x = 0;//圖片初始x坐標
var old_y = 0;//圖片初始y坐標
var _touches = 1;//觸屏的手指數(shù)
var old_scale = 1;//原始放大倍數(shù)
var new_scale = 1;//新的放大倍數(shù)
var is_move = false;//是否移動
var bg_url;
Page({
data: {
hide_canvas:true,//繪圖層顯示控制變量
},
//選擇并將圖片輸出到canvas
change_cover:function(){
var that = this;
wx.showModal({
title: '提示',
content: '更改我的封面',
confirmColor: '#39bae8',
success: function (res) {
if (res.confirm) {
wx.chooseImage({
count: 1, // 默認9
sizeType: ['original', 'compressed'], // 可以指定是原圖還是壓縮圖,默認二者都有
sourceType: ['album', 'camera'], // 可以指定來源是相冊還是相機,默認二者都有
success: function (res0) {
tempFilePath = res0.tempFilePaths[0];
that.setData({
hide_canvas: false,
// edit_url: tempFilePath
})
wx.getImageInfo({
src: tempFilePath,
success: function (res) {
// console.log(res.width)
// console.log(res.height)
tempWidth = res.width;
tempHeight = res.height;
ctx.drawImage(tempFilePath,0, 0, 375,res.height/res.width*375);
ctx.draw();
}
})
}
})
} else if (res.cancel) {
console.log('用戶點擊取消')
}
}
})
},
//監(jiān)聽手指觸摸事件,并判斷是移動還是縮放,并記錄初始狀態(tài)
canvas_start:function(e){
// console.log(e);
var touches = e.touches.length;
if(touches == 1){
_touches = 1;
start_position = { x: e.touches[0].x, y: e.touches[0].y, timeStamp:e.timeStamp}
}else if(touches == 2){
_touches = 2;
start_position = { x: e.touches[0].x, y: e.touches[0].y,x1: e.touches[1].x, y1: e.touches[1].y, timeStamp: e.timeStamp }
}else{
_touches = 1;
}
},
//監(jiān)聽手指移動事件,并做出相應(yīng)調(diào)整
canvas_move: function (e) {
// console.log(e);
var touches = e.touches.length;
if (_touches == 1 && e.timeStamp - start_position.timeStamp > 150) {
ctx.drawImage(tempFilePath, old_x + e.touches[0].x - start_position.x, old_y + e.touches[0].y - start_position.y, 375 * new_scale, tempHeight / tempWidth * 375 * new_scale);
ctx.draw();
is_move = true;
} else if (_touches == 2 && e.timeStamp - start_position.timeStamp > 150) {
var change_x = Math.abs(Math.abs(e.touches[0].x - e.touches[1].x) - Math.abs(start_position.x - start_position.x1));
var change_y = Math.abs(Math.abs(e.touches[0].y - e.touches[1].y) - Math.abs(start_position.y - start_position.y1));
if(change_x - change_y > 10){
old_scale = Math.abs(e.touches[0].x - e.touches[1].x) / Math.abs(start_position.x - start_position.x1);
}else{
old_scale = Math.abs(e.touches[0].y - e.touches[1].y) / Math.abs(start_position.y - start_position.y1);
}
ctx.drawImage(tempFilePath, old_x, old_y, 375 * old_scale * new_scale, tempHeight / tempWidth * 375 * old_scale * new_scale);
ctx.draw();
is_move = true;
}else{
is_move = false;
}
},
//監(jiān)聽手指離開動作,并保存當前狀態(tài)數(shù)據(jù)
canvas_end: function (e) {
// console.log(e);
if (_touches == 1 && is_move) {
old_x = old_x + e.changedTouches[0].x - start_position.x;
old_y = old_y + e.changedTouches[0].y - start_position.y;
} else if (_touches == 2 && is_move) {
new_scale = old_scale * new_scale;
}
},
//確定并上傳背景圖
upload_bg:function(){
var that = this;
var screenWidth = wx.getSystemInfoSync().screenWidth;
// console.log(screenWidth);
wx.canvasToTempFilePath({
x: 0,
y: screenWidth / 750 * 400,
width: screenWidth,
height: screenWidth / 750 * 526,
destWidth: screenWidth,
screenHeight: screenWidth / 750 * 526,
quality:1,
canvasId: 'cover-preview',
success: function (res) {
that.setData({
hide_canvas: true,
})
//res.tempFilePath即為生成的圖片路徑
console.log(res.tempFilePath)
}
})
},
//取消圖片預(yù)覽編輯
cancel_croper:function(){
ctx.clearActions();
this.setData({
hide_canvas: true,
// edit_url: tempFilePath
})
},
})wxss:
#cover-preview{
width: 100%;
height: 100%;
background-color: black;
}
#croper{
width: 750rpx;
height: 526rpx;
position: absolute;
top: 400rpx;
left: 0;
background-color: rgba(135,206,250,0.5);
}
#croper-sure{
width: 120rpx;
height: 50rpx;
border-radius: 10rpx;
color: black;
background-color: rgba(135,206,250,0.8);
font-size: 40rpx;
position: absolute;
top: 946rpx;
right: 10rpx;
text-align: center
}
#croper-cancel{
width: 120rpx;
height: 50rpx;
border-radius: 10rpx;
color: black;
background-color: rgba(135,206,250,0.8);
font-size: 40rpx;
position: absolute;
top: 946rpx;
right: 150rpx;
text-align: center
}以上就是怎么在小程序中實現(xiàn)一個圖片預(yù)覽裁剪插件,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
文章題目:怎么在小程序中實現(xiàn)一個圖片預(yù)覽裁剪插件
網(wǎng)頁鏈接:http://chinadenli.net/article44/jiephe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、小程序開發(fā)、關(guān)鍵詞優(yōu)化、網(wǎng)站策劃、網(wǎng)站設(shè)計、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)