前端vue-cropperjs实现图片裁剪方案

目录
  • 引言
  • 图片裁剪
    • 图片裁剪的流程
    • vue-cropperjs的使用
      • 代码实现
      • 实现效果
    • v-viewer的使用
      • 代码实现
      • 实现效果
  • 最后

引言

做了个图片的裁剪的功能和预览的功能,前端图片的裁剪方案,大多数都是用cropperjs进行封装,npm上有vue-cropperjs可以直接用起来,viewerjs是用来实现图片的预览,这里直接使用了v-viewer来实现。

可以点击现在地址体验喔

git仓库地址以及在线demo地址

图片裁剪

图片裁剪的流程

  • 首先使用el-upload组件,渲染已经存在或者裁剪过的图片
  • 点击文件上传,选中需要裁剪的图片
  • 弹出一个弹框,在弹框中使用vue-cropperjs实现图片裁剪
  • 裁剪完成后,通过回调函数,将处理后的图片文件(Blob格式)上传到服务器或者本地预览出来
  • 裁剪完成的图片列表,通过v-viewer实现点击全屏预览(辅助作用)

vue-cropperjs的使用

代码实现

  • 首先在组件注册VueCropper组件
  • 直接可以通过vue-cropper标签使用组件
  • 设置this.$refs.cropper.setAspectRatio(1)之后,图片只能按照一定的比例裁剪,想要随意裁剪可以不设置
  • 通过this.$refs.cropper.relativeZoom、this.onRotateDegreeChange、this.$refs.cropper.move、this.$refs.cropper.scaleX 等API,可以对图片进行平移、缩放、翻转、旋转等操作
  • 通过this.$refs.cropper.getCroppedCanvas().toBlob()获取到处理后图片的Blob格式文件
  • Blob格式文件处理成File格式后,上传到服务器
// 引入组件并注册
import "cropperjs/dist/cropper.css";
import VueCropper from "vue-cropperjs";

// 直接使用组件
<vue-cropper
  overflow-hidden
  ref="cropper"
  :src="src"
  preview=".preview"
  :minContainerHeight="500"
  background
  :ready="onReady"
/>

// 图片可以在onReady方法中设置裁剪的宽高比例
this.$refs.cropper.setAspectRatio(this.aspectRatioValue);

// 缩放图片
this.$refs.cropper.relativeZoom(percent);

// 图片旋转角度
this.onRotateDegreeChange(this.rotateDegree);

// 图片平移
this.$refs.cropper.move(offsetX, offsetY);

// 图片翻转
this.$refs.cropper.scaleX(scale);
this.$refs.cropper.scaleY(scale);

// 重置
this.$refs.cropper.reset();

// 获取修改后的图片的数据
  this.$refs.cropper
      .getCroppedCanvas({
        // 限制画布大小,限制生成的图片体积
        maxWidth: 2056,
        maxHeight: 2056,
      })
      .toBlob(
        (blob) => {
          // 调用确定的回调函数,将blob上传到服务器或者本地预览
          this.$emit("confirm", blob);
        },
        // 如果旋转角度不为直角,则图片一定会出现空白区域,空白区域默认透明,使用 png 格式
        //this.rotateDegree % 90 === 0 ? this.file.type : 'image/png',
        this.file.type,
        // 质量
        this.quality
      );

// 将文件上传到服务器
function onCropperConfirm(blob) {
    let file = new File([blob], filename, { type: blob.type,});
     const formData = new FormData();
     formData.append("file", file);
     // ...
     axios.post("/upload", formData).then((res) => {
          // ...
     })
}

实现效果

v-viewer的使用

代码实现

v-viewer主要的实现图片的全屏预览,基于viewerjs封装

  • 首先在main.js中引入css和注册v-viewer插件
  • 在页面中可以直接通过this.$viewerApi 调用,传入图片路径的数组和对应的索引,实现全屏预览图片
// 首先在main.js中引入组件
import "viewerjs/dist/viewer.css";
import VueViewer from "v-viewer";
Vue.use(VueViewer);

// 组件中使用
this.$viewerApi({
    options: {
      toolbar: true,
      initialViewIndex: 1,
    },
    images: [
        "https://placem.at/people?random=1&txt=0&w=500&h=500",
        "https://placem.at/people?random=1&txt=0&w=1000&h=500"
    ],
});

实现效果

参考资料

www.npmjs.com/package/v-v…

www.npmjs.com/package/vue…

最后

图片剪裁使用插件实现的话,只能说CV工程师不要太爽,要了解原理的话,还是需要花费很多时间研究的;更多关于前端vue-cropperjs图片裁剪的资料请关注我们其它相关文章!

(0)

相关推荐

  • Vue-cropper 图片裁剪的基本原理及思路讲解

    一:裁剪的思路: 1-1,裁剪区域:需要进行裁剪首先需要形成裁剪区域,裁剪区域的大小和我们的鼠标移动的距离相关联,鼠标移动有多远,裁剪区域就有多大.如下图: 1-2 裁剪区域的宽和高的计算: 如上图,鼠标的横向移动距离和纵向移动距离就形成了裁剪区域的宽和高.那么裁剪区域的宽和高的计算是:当我们点下鼠标时,就能够通过event事件 对象获取鼠标点击位置,e.clientX 和 e.clientY; 当鼠标进行移动的时候,也能通过event获取鼠标的位置,通过两次鼠标位置的改变,就能够获得 鼠标移动

  • vue图片裁剪插件vue-cropper使用方法详解

    本文实例为大家分享了vue图片裁剪插件vue-cropper的使用方法,供大家参考,具体内容如下 我在网上找了很多关于vue裁剪图片的文章,demo都太长了,实在是太长了.有些还都看不懂,最后还是用了个大佬的demo,但是项目实践过程中还是有问题没解决.先介绍吧.效果是下面这样的, 我这里采用了4:3的固定比例进行裁剪,裁剪后的效果 但是裁剪后的图片路径是base64,超级长的路径,最终还是需要处理地址传给后端的,项目用oss处理图片,最终获得一个类似于aad68a8fd577464dbcdea

  • Vue使用Vue-cropper实现图片裁剪

    前言 这两天想给图片添加一个图片裁剪的功能,因为之前的图片都是直接上传的,很多图片肯定在前台显示的时候,都不能很好的达到我们想要的效果,因此就需要我们在对个别图片进行细微调整,已达到我们的目的. 图片裁剪 关于图片裁剪我在github中找到了两种 vue-cropper vue-image-crop-upload 这两种的样式分别如下所示: 首先是vue-image-crop-upload,我们能够发现其实这个截图有点类似于我们需要裁减头像的时候,才需要使用的,而针对于特定的矩形,可能没办法达到

  • vue 如何使用vue-cropper裁剪图片你知道吗

    目录 一.安装: 二.使用: 三.内置方法: 四.使用: 总结 官网: https://github.com/xyxiao001/vue-cropper 一.安装: npm install vue-cropper 或者 yarn add vue-cropper 二.使用: import VueCropper from 'vue-cropper' 设置component: export default { components: { VueCropper } } template中插入:(外面需要

  • vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能

    前端工作中,经常需要图片裁剪的场景,cropper.js是一款优秀的前端插件,api十分丰富. 本文是在vue-cli项目下封装图片裁剪插件,效果图如下: 话不多说,看步骤吧. 第一步:准备开发环境 cropper.js是基于jquery的,所以要先安装jquery 执行命令: npm  install --save-dev jquery cropper 为webpack配置添加jquery的映射 修改webpack.base.conf.js配置,添加标红的一行 第二步:新建图片裁剪组件 ind

  • vue-cropper组件实现图片切割上传

    本文实例为大家分享了vue-cropper组件实现图片切割上传的具体代码,供大家参考,具体内容如下 这几日,等来了些空闲,用vue和spring boot实践一次头像上传,因此记下了,望将来的开发有所帮助. vue-cropper在vue中的引入 1.组件内引入 import { VueCropper } from 'vue-cropper' components: { VueCropper, }, 2.全局引入 在main.js中配置如下代码 import VueCropper from 'v

  • 基于cropper.js封装vue实现在线图片裁剪组件功能

    效果图如下所示, github:demo下载 cropper.js github:cropper.js 官网(demo) cropper.js 安装 npm或bower安装 npm install cropper # or bower install cropper clone下载:下载地址 git clone https://github.com/fengyuanchen/cropper.git 引用cropper.js 主要引用cropper.js跟cropper.css两个文件 <scri

  • 前端vue-cropperjs实现图片裁剪方案

    目录 引言 图片裁剪 图片裁剪的流程 vue-cropperjs的使用 代码实现 实现效果 v-viewer的使用 代码实现 实现效果 最后 引言 做了个图片的裁剪的功能和预览的功能,前端图片的裁剪方案,大多数都是用cropperjs进行封装,npm上有vue-cropperjs可以直接用起来,viewerjs是用来实现图片的预览,这里直接使用了v-viewer来实现. 可以点击现在地址体验喔 git仓库地址以及在线demo地址 图片裁剪 图片裁剪的流程 首先使用el-upload组件,渲染已经

  • vue实现移动端图片裁剪上传功能

    本文实例为大家分享了vue移动端图片裁剪上传的具体代码,供大家参考,具体内容如下 1. 安装cropperjs依赖库 npm install cropperjs 2. 编写组件SimpleCropper.vue <template> <div class="v-simple-cropper"> <slot> <button @click="upload">上传图片</button> </slot>

  • vue项目实现添加图片裁剪组件

    本文实例为大家分享了vue项目添加图片裁剪组件的具体代码,供大家参考,具体内容如下 功能如下图所示: 1.安装命令如下 npm i vue-cropper --save 2.调用组件,引入vue-cropper import { VueCropper } from "vue-cropper"; 3.封装组件代码如下:cropper.vue <template>   <div class="cropper_model">     <el-

  • 一个基于react的图片裁剪组件示例

    开始 写了一年多vue,感觉碰到了点瓶颈,学习下react找找感觉.刚好最近使用vue写了个基于cropperJS的图片裁剪的组件,便花费了几个晚上的功夫用react再写一遍.代码地址 项目是使用create-react-app来开发的,省去了很多webpack配置的功夫,支持eslint,自动刷新等功能,使用前npm install并npm start即可.推荐同样是新学习react的人也用用看. 项目写的比较简陋,自定义配置比较差,不过也是完成了裁剪图片的基本功能,希望可以帮助到初学reac

  • vue实现裁切图片同时实现放大、缩小、旋转功能

    本篇文章主要介绍了vue实现裁切图片同时实现放大.缩小.旋转功能,分享给大家,具体如下: 实现效果: 裁切指定区域内的图片 旋转图片 放大图片 输出bolb 格式数据 提供给 formData 对象 效果图 大概原理: 利用h5 FileReader 对象, 获取 <input type="file"/> "上传到浏览器的文件" ,文件形式 为base64形式, 把 base64 赋给canvas的上下文. 然后给canvas 元素上加入对(moused

  • 详解vue项目中实现图片裁剪功能

    演示地址 https://my729.github.io/picture-crop-demo/dist/#/ 前言 vue版本:3.6.3 https://cli.vuejs.org/zh/ cropperjs: 1.5.1 https://github.com/fengyuanchen/cropperjs elementUI https://element.eleme.io/#/zh-CN 使用 cropperjs插件 和 原生canvas 两种方式实现图片裁剪功能 使用cropperjs插件

  • vue.js 实现图片本地预览 裁剪 压缩 上传功能

    以下代码涉及 Vue 2.0 及 ES6 语法. 目标 纯 javascrpit 实现,兼容ie9及以上浏览器,在本地做好文件格式.长宽.大小的检测,减少浏览器交互. 现实是残酷的,为了兼容Ie9 还是用上了 flash,第二篇来解释解释. 代码结构 <div id="wrap"> <label> 点我上传图片 <input type='file' @change="change" ref="input"> &

  • cropper js基于vue的图片裁剪上传功能的实现代码

    前些日子做了一个项目关于vue项目需要头像裁剪上传功能,看了一篇文章,在此基础上做的修改完成了这个功能,与大家分享一下.原文:http://www.jb51.net/article/135719.htm 首先下载引入cropper js, npm install cropper js --save 在需要的页面引入:import Cropper from "cropper js" html的代码如下: <template> <div id="demo&quo

随机推荐