成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

小程序圖片剪裁

qylost / 340人閱讀

摘要:基于上面原因,我采用的是里面放置圖片,監(jiān)聽上面的手勢(shì),通過樣式控制圖片的旋轉(zhuǎn)縮放和移動(dòng),最后剪裁用隱藏的。

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

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

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

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


  
  
    
  
  
      選擇圖片 
      旋轉(zhuǎn)
      剪裁
  

  
  

  最重要的操作是圖片在view中的位置變化如何在canvas中保持一致再剪裁出來,圖片相對(duì)與view中的左上角坐標(biāo)、圖片的長(zhǎng)度和寬度我們都是知道的,還有旋轉(zhuǎn)值通過用戶手勢(shì)變化計(jì)算出來,旋轉(zhuǎn)的時(shí)候?qū)嫴嫉闹行囊苿?dòng)到圖片的中心點(diǎn)再旋轉(zhuǎn)就行了。

  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;

  //畫布中點(diǎn)坐標(biāo)轉(zhuǎn)移到圖片中心
  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();

  查看完整代碼請(qǐng)移步到:https://github.com/yuanwyj/Mi..., 喜歡的畫點(diǎn)個(gè)start~~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/96412.html

相關(guān)文章

  • 實(shí)踐是檢驗(yàn)程序員的唯一標(biāo)準(zhǔn)01:用戶不想跟你說話并向你扔出一張圖片 - 圖片上傳組件開發(fā)【思路篇】

    摘要:表示不一定是原生形式的數(shù)據(jù)。接口基于,繼承了的功能并將其擴(kuò)展使其支持用戶系統(tǒng)上的文件。讀取操作完成的時(shí)候,會(huì)變成已完成,并觸發(fā)事件,同時(shí)屬性將包含一個(gè)格式的字符串編碼以表示所讀取文件的內(nèi)容。 溫馨提示:這里除了一些幼稚的小組件啥也沒有溫馨提示-續(xù):這是一個(gè)新的系列,寫一些實(shí)際開發(fā)中遇到的一些常用的功能,想法笨拙,代碼亂套 寫在前面 圖片上傳,作為web端一個(gè)常用的功能,在不同的項(xiàng)目中有...

    PiscesYE 評(píng)論0 收藏0
  • PHP極其強(qiáng)大的圖片處理庫Grafika詳細(xì)教程(1):圖像基本處理

    摘要:它包含所有的圖片處理方法。由于,是基于和庫,所以使用方法會(huì)根據(jù)當(dāng)前情況,自動(dòng)選擇所需要的圖片處理庫。這里說明下,如果文字為中文,需要找一個(gè)支持中文的字體。默認(rèn)字體不支持中文,所以你寫中文,就是都是小方框。 Grafika是一個(gè)PHP圖像處理庫,是基于Imagick和GD,可以用于改變圖片大小,剪裁,比較,添加水印等等功能。還有感知哈希,高級(jí)圖像過濾,繪制貝塞爾曲線等功能,可謂非常強(qiáng)大。...

    fai1017 評(píng)論0 收藏0
  • Drawable 使用詳解

    摘要:?jiǎn)⒂没蛲S梦粓D過濾。當(dāng)位圖收縮或拉伸以使其外觀平滑時(shí)使用過濾。在每個(gè)狀態(tài)變更期間,將從上到下遍歷狀態(tài)列表,并使用第一個(gè)與當(dāng)前狀態(tài)匹配的項(xiàng)目此選擇并非基于最佳匹配,而是選擇符合狀態(tài)最低條件的第一個(gè)項(xiàng)目。每個(gè)可繪制對(duì)象由單一元素內(nèi)的元素表示。 showImg(https://segmentfault.com/img/remote/1460000019975019?w=157&h=54); ...

    JinB 評(píng)論0 收藏0
  • 本文教你用了python圖片剪裁

      Python語言的表達(dá)照片處理使人們常常所使用的層面,那樣我們應(yīng)該怎么實(shí)現(xiàn)圖片的裁切呢?接下來本文關(guān)鍵為大家介紹了關(guān)于用python圖片剪裁的資料,原文中根據(jù)案例編碼推薦的十分詳盡,必須的小伙伴可以借鑒一下  怎么使用python圖片剪裁  以上如圖所示,這也是1張包括了各種象棋棋子的照片。我們應(yīng)該將在其中每個(gè)棋盤都裁切出去,這時(shí)可以借助python的PIL庫成功?! ∫?、組裝PIL庫  假如...

    89542767 評(píng)論0 收藏0
  • 如何使用css來讓圖片居中不變形 微信程序和web端適用

    摘要:被替換的內(nèi)容將被縮放,以在填充元素的內(nèi)容框時(shí)保持其寬高比。整個(gè)對(duì)象在填充盒子的同時(shí)保留其長(zhǎng)寬比,因此如果寬高比與框的寬高比不匹配,該對(duì)象將被添加黑邊。如果對(duì)象的寬高比與盒子的寬高比不匹配,該對(duì)象將被剪裁以適應(yīng)。圖片變形很多人祭奠出了妖魔鬼怪般的各種大法,比如使用jq來寫,或者使用css表達(dá)式來寫。今天我總結(jié)的是使用css3來寫,唯一最大缺點(diǎn)就是對(duì)一些瀏覽器版本不夠兼容。下面就是關(guān)于如何使用c...

    番茄西紅柿 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<