亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

小程序圖片剪裁加旋轉的示例代碼

 更新時間:2018年07月10日 16:05:43   作者:宋體四號  
這篇文章主要介紹了小程序圖片剪裁的示例代碼,可以通過手勢控制旋轉縮放移動,也可以點擊旋轉進行90度旋轉,非常具有實用價值,感興趣的小伙伴們可以參考一下

一個微信小程序圖片剪裁組件,可以通過手勢控制旋轉縮放移動,也可以點擊旋轉進行90度旋轉,先看下效果(視屏不知道為啥用不了,上個壓縮過度的GIF先):

圖片剪裁毫無疑問用的是canvas,但是開發(fā)過小程序的同學應該了解小程序canvas的一些坑。比如小程序canvas的設定了畫布的大小后不能像web的canvas那樣通過css樣式來調整畫布在手機上顯示的大小、還有canvas不能設置太大因為可能會在某些安卓機上導致小程序崩潰、canvas繪制過大的圖片會讓小程序變得非??D等等。

網上能找到的圖片剪裁框架大多采用在canvas上面直接繪制圖片,然后通過監(jiān)聽canvas上的用戶手勢來控制圖片移動旋轉等,這樣截出來的圖片會出現模糊的問題,因為canvas的太小了。一種解決方法是,在頁面上再放置一個隱藏的canvas大小設為原來的兩倍或者再大一點也行用來作為實際剪裁圖片的canvas,當然剪裁數據都是從第一個canvas那里來的。但是這樣還是有些小問題,就是canvas繪制大的圖片會出現卡頓的問題,這種方案在監(jiān)聽用戶手勢的變化的時候要不停的重新繪制canvas,卡頓變得更加嚴重,體驗非常不好。

基于上面原因,我采用的是view里面放置圖片,監(jiān)聽view上面的手勢,通過css樣式控制圖片的旋轉、縮放和移動,最后剪裁用隱藏的canvas。先看下頁面布局:

<view class="container">
 <!-- 剪裁框與初始圖片,剪裁框監(jiān)聽用戶手勢,獲取移動縮放旋轉值,images通過css樣式顯示變化 -->
 <view class="img" style="width:{{ width }}px; height:{{height}}px" catchtouchstart="touchstartCallback" catchtouchmove="touchmoveCallback" catchtouchend="touchendCallback" >
  <image style="transform: translate({{stv.offsetX}}px, {{stv.offsetY}}px) scale({{stv.scale}}) rotate({{ stv.rotate }}deg);width:{{originImg.width}}px; height: {{originImg.height}}px" src="{{ originImg.url }}"></image>
 </view>
 <view class='footer'>
   <view bindtap='uploadTap'>選擇圖片</view> 
   <view bindtap='rotate'>旋轉</view>
   <view bindtap='cropperImg'>剪裁</view>
 </view>

 <!-- canvas長寬設為初始圖片設置的長款的兩倍,使剪裁得到的圖片更清晰,也不至于過大 -->
 <canvas class='imgcrop' style="width:{{ width * 2 }}px;height:{{ height * 2}}px;" canvas-id='imgcrop'></canvas>
</view>

最重要的操作是圖片在view中的位置變化如何在canvas中保持一致再剪裁出來,圖片相對與view中的左上角坐標、圖片的長度和寬度我們都是知道的,還有旋轉值通過用戶手勢變化計算出來,旋轉的時候將畫布的中心移動到圖片的中心點再旋轉就行了。

let ctx = wx.createCanvasContext('imgcrop',this);
   let cropData = _this.data.stv;
   ctx.save();
   // 縮放偏移值
   let x = (_this.data.originImg.width - _this.data.originImg.width * cropData.scale) / 2;
   let y = (_this.data.originImg.height - _this.data.originImg.height * cropData.scale) / 2;

   //畫布中點坐標轉移到圖片中心
   let movex = (cropData.offsetX + x) * 2 + _this.data.originImg.width * cropData.scale;
   let movey = (cropData.offsetY + y) * 2 + _this.data.originImg.height * cropData.scale;
   ctx.translate(movex, movey);
   ctx.rotate(cropData.rotate * Math.PI / 180);
   ctx.translate(-movex, -movey);
   
   ctx.drawImage(_this.data.originImg.url, (cropData.offsetX + x) * 2, (cropData.offsetY + y) * 2, _this.data.originImg.width * 2 * cropData.scale, _this.data.originImg.height * 2 * cropData.scale);
   ctx.restore();

查看完整代碼請移步到:https://github.com/yuanwyj/Mini-Program-cropper, 喜歡的畫點個start~~

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 如何使Chrome控制臺支持多行js模式——意外發(fā)現

    如何使Chrome控制臺支持多行js模式——意外發(fā)現

    一直以來,Chrome控制臺都缺少象IE調試臺那樣的多行執(zhí)行模式,今天意外發(fā)現Chrome其實也支持多行模式
    2013-06-06
  • 基于leaflet.js實現修改地圖主題樣式的流程分析

    基于leaflet.js實現修改地圖主題樣式的流程分析

    這篇文章主要介紹了基于leaflet.js實現修改地圖主題樣式的流程,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • JavaScript對象解構的用法實例解析

    JavaScript對象解構的用法實例解析

    解構賦值允許你使用類似數組或對象字面量的語法將數組和對象的屬性賦給各種變量,下面這篇文章主要給大家介紹了關于JavaScript對象解構用法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • 微信小程序頁面跳轉功能之從列表的item項跳轉到下一個頁面的方法

    微信小程序頁面跳轉功能之從列表的item項跳轉到下一個頁面的方法

    這篇文章主要介紹了微信小程序頁面跳轉功能之從列表的item項跳轉到下一個頁面的方法,結合具體實例形式總結分析了微信小程序頁面跳轉及列表item項跳轉頁面的相關操作技巧,需要的朋友可以參考下
    2017-11-11
  • 如何檢測JavaScript的各種類型

    如何檢測JavaScript的各種類型

    在寫js腳本的時候我們必須對一件事保持警惕,就是避免異常的發(fā)生。在本篇文章里面,我想談談一部分類型檢測,有需要的可以參考學習。
    2016-07-07
  • 原生JS實現拖拽位置預覽

    原生JS實現拖拽位置預覽

    這篇文章主要為大家詳細介紹了原生JS實現拖拽位置預覽,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • JavaScript實現元素滾動條到達一定位置循環(huán)追加內容

    JavaScript實現元素滾動條到達一定位置循環(huán)追加內容

    下面小編就為大家分享一篇JavaScript實現元素滾動條到達一定位置循環(huán)追加內容,具有很好的參考價值,希望對大家有所幫助
    2017-12-12
  • JS實現獲取數組中最大值或最小值功能示例

    JS實現獲取數組中最大值或最小值功能示例

    這篇文章主要介紹了JS實現獲取數組中最大值或最小值功能,結合實例形式總結分析了javascript獲取數組最大值與最小值的三種常見操作技巧,需要的朋友可以參考下
    2019-03-03
  • JS如何輸出26個英文字符

    JS如何輸出26個英文字符

    這篇文章主要介紹了JS如何輸出26個英文字符問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Uniapp如何封裝網絡請求方法demo

    Uniapp如何封裝網絡請求方法demo

    這篇文章主要為大家介紹了Uniapp如何封裝網絡請求方法demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10

最新評論