vue+element 实现截取图片 并上传展示

遇到一个问题  上传一张图片需要先判断是否符合格式,如果不符合格式就截取并上传

由于我是使用vue+element  我便选择了 cropper插件进行截取图片

1.在页面上写好,我这里是用了element框架的模态框包着


 <el-dialog title="图片剪裁" :visible.sync="dialogVisible" append-to-body>

      <div class="cropper-content">

        <div class="cropper" style="text-align: center">

          <vueCropper

            ref="cropper"

            :img="option.img"

            :outputSize="option.outputSize"

            :outputType="option.outputType"

            :info="option.info"

            :canScale="option.canScale"

            :autoCrop="option.autoCrop"

            :autoCropWidth="option.autoCropWidth"

            :autoCropHeight="option.autoCropHeight"

            :fixed="option.fixed"

            :fixedBox="option.fixedBox"

            :fixedNumber="option.fixedNumber"

          ></vueCropper>

        </div>

      </div>

      <div slot="footer" class="dialog-footer">

        <el-button @click="dialogVisible = false">取 消</el-button>

        <el-button type="primary" @click="finish" :loading="loading"

          >确认</el-button

        >

      </div>

    </el-dialog>

 dialogVisible: false,

      // 裁剪组件的基础配置option

      option: {

        img: "", // 裁剪图片的地址

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

        outputSize: 1, // 裁剪生成图片的质量

        outputType: "jpeg", // 裁剪生成图片的格式

        canScale: false, // 图片是否允许滚轮缩放

        autoCrop: true, // 是否默认生成截图框

        autoCropWidth: 686, // 默认生成截图框宽度

        autoCropHeight: 274, // 默认生成截图框高度

        fixedBox: true, // 固定截图框大小 不允许改变

        fixed: true, // 是否开启截图框宽高固定比例

        fixedNumber: [2.5, 1], // 截图框的宽高比例

        full: false, // 是否输出原图比例的截图

        canMoveBox: true, // 截图框能否拖动

        original: false, // 上传图片按照原始比例渲染

        centerBox: true, // 截图框是否被限制在图片里面

        infoTrue: true, // true 为展示真实输出图片宽高 false 展示看到的截图框宽高

        canMove: true,

        // maxImgSize: 2000,    //限制图片最大宽度和高度

        //  height: true,        //是否按照设备的dpr 输出等比例图片

        // infoTrue: false,     //true为展示真实输出图片宽高,false展示看到的截图框宽高

      },

      picsList: [], //页面显示的数组

      // 防止重复提交

      loading: false,

      fileinfo: {},

      fileimg: "",

      filename: undefined,


2.在上传图片前做处理


let data = window.URL.createObjectURL(new Blob([file]));    // 用来生成本地路径 方便截图时展示   如file报错 请使用file.raw

      this.filename = file;

      this.option.img = data;


判断当前图片的长宽(同一个方法)

const isSize = new Promise(function (resolve, reject) {

        //  判断图片格式

        let width = 686;

        let height = 274;

        let _URL = window.URL || window.webkitURL;

        let img = new Image();

        img.onload = function () {

          let valid = img.width == width && img.height == height;

          valid ? resolve() : reject();

        };

        img.src = _URL.createObjectURL(file);

      }).then(

        () => {

          return file;

        },

        () => {

          this.$confirm(

            "上传的活动首页图宽*高必须是等于686*274! 是否截取?",

            "截取首页图",

            {

              confirmButtonText: "确定",

              cancelButtonText: "取消",

              type: "warning",

            }

          )

            .then(() => {

              this.dialogVisible = true;

            })

            .catch(function () {});

          return Promise.reject();

        }

      );

点击完成截图

 finish() {

      console.log("成功");

      var that = this;

      that.$refs.cropper.getCropBlob(async (data) => {

        let fileist = {};

        that.fileimg = window.URL.createObjectURL(data);

        console.log(that.fileimg, "reader.resul");

        // let url = null;

        let formData = new FormData();

        let file = new File(

          [data],

          typeof that.filename.name == "undefined"

            ? that.optionsImg

            : that.filename.name,

          { type: data.type, lastModified: Date.now() }

        );

        // 转成blob格式地址

        file.uid = Date.now();

        fileist.uid = Date.now();

        fileist.url = window.URL.createObjectURL(data);

        formData.append("file", file);

        fileist.raw = file;

        fileist.name = file.name;

        fileist.size = file.size;

        fileist.percentage=0;

        that.itemImgList=[fileist];        // 上传完之后显示bloe 地址  也可更换为接口返回路径,但必须要上传文件列表绑定该数组:file-list="itemImgList"

        // 转成base64

        // console.log("file", file);

        // var reader = new FileReader();

        // reader.readAsDataURL(file);

        // reader.onload = function () {

        //   console.log(file.url, "reader.resul");

        // };

        //调用axios上传

        // return;

        axios({

          method: "post",

          url: that.api + "/oss/file/activity",

          data: formData,

          headers: that.myHeaders,

        })

          .then((res) => {

            res = res.data;

            that.handleAvatarSuccess(res, file);

            that.dialogVisible = false;

          })

          .catch((err) => {

            console.log("上传失败!");

          });

      });

    },

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容