亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

javascript實現自由編輯圖片代碼詳解

2024-05-06 16:52:32
字體:
來源:轉載
供稿:網友

當下我們項目中需要一個可自由編輯圖片的功能,當圖片可能出現需要頻繁編輯,同時能滿足發現裁剪不滿意想要微調的時候,會發現如果我們處理圖片按照平常的習慣,如裁剪后上傳服務器或者轉base64,都是不符合需求的。那么該怎么處理比較好呢?如何以盡量少的網絡請求、少占用存儲來解決應用場景呢?那么,便想到了只用純數據來跟我們的功能打交道。

先安利個裁圖神器cropperjs,個人認為是個易上手,配置和api方法蠻齊全的一個組件庫。

項目內引入,一定不要漏了引用樣式

import Cropper from 'cropperjs';import 'cropperjs/dist/cropper.css';

這里我們以react為例

this.state = {width: 640, //圖片展示寬height: 360, //圖片展示高 imgWidth: 640, //圖片實際寬imgHeight: 360, //圖片實際高imgLeft: 0, //圖片左偏移imgTop: 0, //圖片上偏移editing: false //是否編輯中}//展示圖片的基本dom結構,我們使用外div內img的形式,來跟數據結合控制裁剪圖片的展示const { width, height, imgWidth, imgHeight, imgLeft, imgTop, editing } = this.state;const containerStyle = {width: `${width}px`,height: `${height}px`}const imgStyle = {width: `${imgWidth}px`,height: `${imgHeight}px`,left: `${imgLeft}px`,top: `${imgTop}px`}.img-container {overflow: hidden;position: relative;}.crop-img {position: absolute;left: 0;top: 0;}<div className="img-container" style={containerStyle}><img className="crop-img"src={picture} style={imgStyle} height="707" src="https://files.vevb.com/file_images/article/201906/2019621105324051.jpg?201952110543" style="border: 1px solid rgb(204, 204, 204); vertical-align: middle; padding: 1px; overflow: hidden; max-width: 696px; width: 650px; height: auto;" width="1271" />

所以在這里,為了圖片編輯的自由度,建議分開展示dom與用以初始化cropper對象的dom,在這里編輯區域為全屏幕為例,根據項目實際功能區域進行調整

.edit-container {position: absolute;left: 0;right: 0;top: 0;bottom: 0;}<div className="img-container" style={containerStyle}><img className="crop-img"src={picture} style={imgStyle} height="707" src="https://files.vevb.com/file_images/article/201906/2019621105324052.jpg?201952110548" style="border: 1px solid rgb(204, 204, 204); vertical-align: middle; padding: 1px; overflow: hidden; max-width: 696px; width: 650px; height: auto;" width="800" />

javascript,自由編輯圖片,代碼

重點介紹下我們用到的兩個api方法getCropBoxData和getCanvasData,getCanvasData是用來獲取圖片的實際數據的(當前的寬高,和相對于父元素可視區域的位移偏移量),getCropBoxData則是獲取相對于圖片區域的裁剪區相關數據。

那么后續的需求接著來了,我們怎么做到二次編輯的時候,能還原效果呢,嗯,其實在前面我們記錄裁圖數據的時候,把相應的數據關系再計算一遍就好了,在初始化cropper的options中增加配置

const options = {dragMode: 'move',background: false,//控件初始化后重置相應配置ready: () => {const { width, height, imgWidth, imgHeight, imgLeft, imgTop } = this.state;//根據實際需要出現裁圖功能進行定位,此處left和top僅為測試暫時默認值定義const left = 50; const top = 50;this.myCropper.setCanvasData({width: imgWidth,height: imgHeight,left: left,top: top});this.myCropper.setCropBoxData({left: left - imgLeft,top: top - imgTop,width: width,height: height})}}this.myCropper = new Cropper(this.myRef.current, options);

這時候我們再點擊裁圖,就完美還原了,左邊和上邊的間隙就是setCanvasData的top和left,根據實際項目進行調整,setCropBoxData的left和top是相對于cropper-canvas的定位,才有了以上的計算形式。

javascript,自由編輯圖片,代碼

此時,基本功能到此結束,如果說是應用在h5編輯中,設計到scale縮放的話,相關的數據計算都要算上scale的縮放值哦,不然就會出現展示圖片和編輯圖片大小不對等的狀況。同時還有許多功能就不做展示了,設置裁剪框比例,編輯縮放等,歡迎嘗試。

當然了,如果想要保存圖片,也有相應的方法到處裁剪圖片的數據

this.myCropper.getCroppedCanvas().toDataURL('image/jpeg')

最后,我們可以看到,在整個功能過程中,我們需要的只是裁剪的數據,讀寫快,也不需要進行額外的圖片存儲,減少文件服務器存儲的開銷與優化。

cropperjs github

感謝大家收看,歡迎討論和指正。

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


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品永久免费观看| 欧美猛交ⅹxxx乱大交视频| 91精品国产综合久久香蕉的用户体验| 亚洲四色影视在线观看| 亚洲变态欧美另类捆绑| 日韩免费精品视频| 欧美成人午夜激情| 精品久久久在线观看| 国产精品永久免费观看| 成人美女免费网站视频| 欧美成人精品激情在线观看| 国产精品久久久久久婷婷天堂| 亚洲激情在线观看视频免费| 激情久久av一区av二区av三区| 成人免费看片视频| 91wwwcom在线观看| 欧洲精品久久久| 国产精品成av人在线视午夜片| 97香蕉久久超级碰碰高清版| 久久精品人人做人人爽| 91精品视频在线播放| 国产欧美日韩丝袜精品一区| 91成人福利在线| 中文字幕亚洲字幕| 91高清视频免费| 97香蕉超级碰碰久久免费的优势| 77777少妇光屁股久久一区| 日韩麻豆第一页| 91精品国产高清久久久久久91| 久久av在线播放| 北条麻妃在线一区二区| 91经典在线视频| 成人午夜两性视频| 亚洲精品成人久久| 国产精品丝袜视频| 国产美女被下药99| 亚洲免费视频一区二区| 精品色蜜蜜精品视频在线观看| 一区二区三区黄色| 国产成人欧美在线观看| 欧美老少配视频| 在线观看免费高清视频97| 久青草国产97香蕉在线视频| 日韩精品在线观看一区| 麻豆乱码国产一区二区三区| 国产视频在线一区二区| 国内精品视频在线| 亚洲人精选亚洲人成在线| 国产精品爱啪在线线免费观看| 久久久国产精品亚洲一区| 国产成人亚洲综合91精品| 国产丝袜精品视频| 欧美精品久久久久久久免费观看| 欧美色播在线播放| 91成人福利在线| 91高清视频在线免费观看| 成人伊人精品色xxxx视频| 国外色69视频在线观看| 国产成人精品电影久久久| 日韩电影免费观看在线观看| 在线播放日韩欧美| 欧美成年人视频网站| 久久精品中文字幕电影| 久久成人一区二区| 日韩av综合网站| 日韩在线一区二区三区免费视频| 成人免费观看49www在线观看| 欧美大胆a视频| 日韩精品一区二区三区第95| 日韩av在线高清| yellow中文字幕久久| 久久精品国产综合| 日韩电影在线观看免费| 中文字幕成人精品久久不卡| 亚洲女人天堂色在线7777| 国产精品三级美女白浆呻吟| 欧美老少做受xxxx高潮| 中文字幕日韩免费视频| 欧美精品在线免费播放| 美女久久久久久久| 欧美午夜无遮挡| 精品电影在线观看| 欧美韩日一区二区| 国产日韩在线看片| 欧美高清电影在线看| 成人自拍性视频| 亚洲第一免费播放区| 国产亚洲一区二区精品| 日韩欧美大尺度| 久久综合久中文字幕青草| 久久精品亚洲94久久精品| 国产精品一区av| 一区二区三区四区在线观看视频| 国产一区二区三区视频| 亚洲国产天堂久久综合| 国产精品99久久久久久www| 国产精品久久久久av免费| 国产精品成av人在线视午夜片| 国产精品99久久久久久久久| 欧美高跟鞋交xxxxhd| 国产精品久久久久久久天堂| 国产精品稀缺呦系列在线| 亚洲欧美中文字幕在线一区| 精品中文字幕在线2019| 日本精品在线视频| 久久精品视频99| 日韩亚洲精品电影| 日韩免费av片在线观看| 亚洲最大中文字幕| 国产成人精品久久| 51精品国产黑色丝袜高跟鞋| 久久精品电影一区二区| 亚洲无亚洲人成网站77777| 亚洲嫩模很污视频| 国产精品高清免费在线观看| 精品国产一区二区三区在线观看| 中文字幕国内精品| 成人免费福利视频| 欧美在线一级视频| 中文字幕亚洲一区二区三区五十路| 欧美专区第一页| 欧美日韩国产精品一区| 国产亚洲免费的视频看| 久久99亚洲热视| 视频直播国产精品| 91在线高清免费观看| 色系列之999| 色天天综合狠狠色| 中文字幕亚洲一区在线观看| 欧美巨大黑人极品精男| 国产美女精品免费电影| 日韩美女免费观看| 中文字幕精品国产| 成人乱色短篇合集| 免费97视频在线精品国自产拍| 欧美黑人狂野猛交老妇| 91精品久久久久久久久久入口| 在线观看国产精品淫| 日韩欧美一区视频| 精品国内自产拍在线观看| 欧美性极品xxxx做受| 在线电影av不卡网址| 2018日韩中文字幕| 亚洲网在线观看| 欧美影院久久久| 亚洲精品国产品国语在线| 日韩av电影手机在线观看| 亚洲夜晚福利在线观看| 欧美激情在线有限公司| 青青久久aⅴ北条麻妃| 91精品国产综合久久久久久蜜臀| 欧美另类暴力丝袜| 欧美野外wwwxxx| 国产精品18久久久久久麻辣| 亚洲影院高清在线| 国产精品日日做人人爱| 国产精品久久久久久久久久三级| 国产成人精品免费久久久久| 一区二区在线视频播放| 尤物九九久久国产精品的特点| 日本精品在线视频| 久久久精品国产| 欧美精品少妇videofree| 亚洲精品国产综合区久久久久久久|