vue cropper圖片剪切組件

1.配置cropper

npm install vue-cropper

2.局部引入

import { VueCropper } from "vue-cropper";

3.使用html

<!-- 剪切圖片的彈框-->

? ? <div class="upload-dialog">

? ? ? <el-dialog title="圖片裁剪" :visible.sync="isShowCropper" :close-on-click-modal="false" custom-class="cropper-dialog">

? ? ? ? <div class="vue-cropper-box">

? ? ? ? ? <div class="vue-cropper-content">

? ? ? ? ? ? <vueCropper

? ? ? ? ? ? ? ref="cropper"

? ? ? ? ? ? ? :img="option.img"

? ? ? ? ? ? ? :outputSize="option.size"

? ? ? ? ? ? ? :outputType="option.outputType"

? ? ? ? ? ? ? :info="option.info"

? ? ? ? ? ? ? :full="option.full"

? ? ? ? ? ? ? :canMove="option.canMove"

? ? ? ? ? ? ? :canMoveBox="option.canMoveBox"

? ? ? ? ? ? ? :original="option.original"

? ? ? ? ? ? ? :autoCrop="option.autoCrop"

? ? ? ? ? ? ? :autoCropWidth="option.autoCropWidth"

? ? ? ? ? ? ? :autoCropHeight="option.autoCropHeight"

? ? ? ? ? ? ? :fixedBox="option.fixedBox"

? ? ? ? ? ? ? @realTime="realTime"

? ? ? ? ? ? ? @imgLoad="imgLoad"

? ? ? ? ? ></vueCropper>

? ? ? ? ? </div>

? ? ? ? ? <div class="operate-wrap">

? ? ? ? ? ? <div class="lf">

? ? ? ? ? ? ? <el-button type="primary" plain @click="turnLeft">左旋轉(zhuǎn)</el-button>

? ? ? ? ? ? ? <el-button type="primary" plain @click="turnRight">右旋轉(zhuǎn)</el-button>

? ? ? ? ? ? ? <el-button type="primary" plain @click="changeScale(1)">放大</el-button>

? ? ? ? ? ? ? <el-button type="primary" plain @click="changeScale(-1)">縮小</el-button>

? ? ? ? ? ? ? <el-button type="primary" @click="onCubeImg">上傳</el-button>

? ? ? ? ? ? </div>

? ? ? ? ? ? <div class="rt">

? ? ? ? ? ? ? <el-button type="primary" @click="cancleCropper">取消</el-button>

? ? ? ? ? ? </div>

? ? ? ? ? </div>

? ? ? ? </div>

? ? ? </el-dialog>

? ? </div>


3.1js

data () {

? ? return {

? ? ? isShowCropper:false,

? ? ? fileImgList:[],

? ? ? option: {

? ? ? ? img: '', // 裁剪圖片的地址

? ? ? ? info: true, // 裁剪框的大小信息

? ? ? ? outputSize: 1, // 剪切后的圖片質(zhì)量(0.1-1)

? ? ? ? full: true, // 輸出原圖比例截圖 props名full

? ? ? ? outputType: 'png', // 裁剪生成額圖片的格式

? ? ? ? canMove: true,? // 能否拖動圖片

? ? ? ? original: false,? // 上傳圖片是否顯示原始寬高

? ? ? ? canMoveBox: true,? // 能否拖動截圖框

? ? ? ? autoCrop: true, // 是否默認(rèn)生成截圖框

? ? ? ? autoCropWidth: 200, // 默認(rèn)生成截圖框?qū)挾?/p>

? ? ? ? autoCropHeight: 200, // 默認(rèn)生成截圖框高度

? ? ? ? fixedBox: false // 截圖框固定大小

? ? ? },

? ? }

? },

components: { VueCropper },

beforeAvatarUploadPS(file) {

? ? ? this.option.img=URL.createObjectURL(file);

? ? ? const isDWG = file.name.split('.');

? ? ? const format = isDWG[isDWG.length - 1];

? ? ? // uploadParams.file="";

? ? ? if (format !="png" && format !="jpg") {

? ? ? ? this.$message.error('上傳文件只能是 png或jpg 格式!');

? ? ? ? return false;

? ? ? }

? ? ? this.isShowCropper = true;

? ? },

? ? // 然后我加了幾個剪切的按鈕進行旋轉(zhuǎn)或放大粤剧,并把上傳方法一并粘貼到如下:

? ? turnLeft() {

? ? ? this.$refs.cropper.rotateLeft();

? ? },

? ? turnRight() {

? ? ? this.$refs.cropper.rotateRight();

? ? },

? ? cancleCropper() {//取消截圖

? ? ? this.isShowCropper = false;

? ? },

? ? changeScale(num){

? ? ? num = num || 1;

? ? ? this.$refs.cropper.changeScale(num);

? ? },

? ? imgLoad (msg) {

? ? ? console.log('imgLoad')

? ? ? console.log(msg)

? ? },

? ? // 實時預(yù)覽函數(shù)

? ? realTime(data) {

? ? ? console.log('realTime')

? ? ? this.previews = data

? ? },

? ? onCubeImg() {//剪切上傳

? ? ? // 獲取cropper的截圖的base64 數(shù)據(jù)

? ? ? this.$refs.cropper.getCropData(data => {

? ? ? ? //先將顯示圖片地址清空杠茬,防止重復(fù)顯示

? ? ? ? // this.option.img = "";

? ? ? ? //將剪裁后base64的圖片轉(zhuǎn)化為file格式

? ? ? ? let file = this.convertBase64UrlToBlob(data);

? ? ? ? // this.fileImg=URL.createObjectURL(file);

? ? ? ? var formData = new FormData();

? ? ? ? formData.append("file", file);

? ? ? ? console.log(data)

? ? ? });

? ? },

? ? // 將base64的圖片轉(zhuǎn)換為file文件

? ? convertBase64UrlToBlob(urlData) {

? ? ? //去掉url的頭汇歹,并轉(zhuǎn)換為byte

? ? ? let bytes = window.atob(urlData.split(",")[1]);

? ? ? //處理異常,將ascii碼小于0的轉(zhuǎn)換為大于0

? ? ? let ab = new ArrayBuffer(bytes.length);

? ? ? let ia = new Uint8Array(ab);

? ? ? for (var i = 0; i < bytes.length; i++) {

? ? ? ? ia[i] = bytes.charCodeAt(i);

? ? ? }

? ? ? return new Blob([ab], { type: "image/jpeg" });

? ? },

? },

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市哭廉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌解总,老刑警劉巖宇葱,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異往史,居然都是意外死亡仗颈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門椎例,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挨决,“玉大人请祖,你說我怎么就攤上這事』嗣蓿” “怎么了损拢?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長撒犀。 經(jīng)常有香客問我福压,道長,這世上最難降的妖魔是什么或舞? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任荆姆,我火速辦了婚禮,結(jié)果婚禮上映凳,老公的妹妹穿的比我還像新娘胆筒。我一直安慰自己,他們只是感情好诈豌,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布仆救。 她就那樣靜靜地躺著,像睡著了一般矫渔。 火紅的嫁衣襯著肌膚如雪彤蔽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天庙洼,我揣著相機與錄音顿痪,去河邊找鬼。 笑死油够,一個胖子當(dāng)著我的面吹牛蚁袭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播石咬,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼揩悄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鬼悠?” 一聲冷哼從身側(cè)響起虏束,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厦章,沒想到半個月后镇匀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡袜啃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年汗侵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡晰韵,死狀恐怖发乔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情雪猪,我是刑警寧澤栏尚,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站只恨,受9級特大地震影響译仗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜官觅,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一纵菌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧休涤,春花似錦咱圆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捷凄,卻和暖如春忱详,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纵势。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工踱阿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留管钳,地道東北人钦铁。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像才漆,于是被迫代替她去往敵國和親牛曹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355