1. 下面代码直接就可以复制使用了,但是需要在本地下个cropperjs,下载命令:npm install cropperjs --save-dev
  1. <template>
    <div id="yin">
    <div id="demo">
    <!-- 遮罩层 -->
    <div class="container" v-show="panel">
    <div>
    <img id="image" :src="url" alt="Picture">
    </div>
  2.  
  3. <button type="button" id="button" @click="crop">确定</button>
  4.  
  5. </div>
  6.  
  7. <div style="padding:20px;">
    <div class="show">
    <div class="picture" :style="'backgroundImage:url('+headerImage+')'">
    </div>
    </div>
    <div style="margin-top:20px;">
    <input type="file" id="change" accept="image" @change="change">
    <label for="change"></label>
    </div>
  8.  
  9. </div>
    </div>
    </div>
    </template>
    <script>
    import Cropper from 'cropperjs'
    export default {
    components: {
  10.  
  11. },
    data () {
    return {
    headerImage:'',
    picValue:'',
    cropper:'',
    croppable:false,
    panel:false,
    url:''
    }
    },
    mounted () {
    //初始化这个裁剪框
    var self = this;
    var image = document.getElementById('image');
    this.cropper = new Cropper(image, {
    aspectRatio: 1,
    viewMode: 1,
    background:false,
    zoomable:false,
    ready: function () {
    self.croppable = true;
    }
    });
    },
    methods: {
    getObjectURL (file) {
    var url = null ;
    if (window.createObjectURL!=undefined) { // basic
    url = window.createObjectURL(file) ;
    } else if (window.URL!=undefined) { // mozilla(firefox)
    url = window.URL.createObjectURL(file) ;
    } else if (window.webkitURL!=undefined) { // webkit or chrome
    url = window.webkitURL.createObjectURL(file) ;
    }
    return url ;
    },
    change (e) {
    let files = e.target.files || e.dataTransfer.files;
    if (!files.length) return;
    this.panel = true;
    this.picValue = files[0];
  12.  
  13. this.url = this.getObjectURL(this.picValue);
    //每次替换图片要重新得到新的url
    if(this.cropper){
    this.cropper.replace(this.url);
    }
    this.panel = true;
  14.  
  15. },
    crop () {
    this.panel = false;
    var croppedCanvas;
    var roundedCanvas;
  16.  
  17. if (!this.croppable) {
    return;
    }
    // Crop
    croppedCanvas = this.cropper.getCroppedCanvas();
    console.log(this.cropper)
    // Round
    roundedCanvas = this.getRoundedCanvas(croppedCanvas);
  18.  
  19. this.headerImage = roundedCanvas.toDataURL();
    this.postImg()
  20.  
  21. },
    getRoundedCanvas (sourceCanvas) {
  22.  
  23. var canvas = document.createElement('canvas');
    var context = canvas.getContext('2d');
    var width = sourceCanvas.width;
    var height = sourceCanvas.height;
  24.  
  25. canvas.width = width;
    canvas.height = height;
  26.  
  27. context.imageSmoothingEnabled = true;
    context.drawImage(sourceCanvas, 0, 0, width, height);
    context.globalCompositeOperation = 'destination-in';
    context.beginPath();
    context.arc(width / 2, height / 2, Math.min(width, height) / 2, 0, 2 * Math.PI, true);
    context.fill();
  28.  
  29. return canvas;
    },
    postImg () {
    //这边写图片的上传
    }
    }
    }
  30.  
  31. </script>
    <style scoped="">
    #yin{
    margin-top:50px;
    font-size: 16px;
    color: #39c5bb
    }
    *{
    margin: 0;
    padding: 0;
    }
    #demo #button {
    position: absolute;
    right: 10px;
    top: 10px;
    width: 80px;
    height: 40px;
    border:none;
    border-radius: 5px;
    background:white;
    }
    #demo .show {
    width: 100px;
    height: 100px;
    overflow: hidden;
    position: relative;
    border-radius: 50%;
    border: 1px solid #d5d5d5;
    }
    #demo .picture {
    width: 100%;
    height: 100%;
    overflow: hidden;
    background-position: center center;
    background-repeat: no-repeat;
    background-size: cover;
    }
    #demo .container {
    z-index: 99;
    position: fixed;
    padding-top: 60px;
    left: 0;
    top: 0;
    right: 0;
    bottom: 0;
    background:rgba(0,0,0,1);
    }
  32.  
  33. #demo #image {
    max-width: 100%;
    }
  34.  
  35. .cropper-view-box,.cropper-face {
    border-radius: 50%;
    }
    .cropper-container {
    font-size: 0;
    line-height: 0;
  36.  
  37. position: relative;
  38.  
  39. -webkit-user-select: none;
  40.  
  41. -moz-user-select: none;
  42.  
  43. -ms-user-select: none;
  44.  
  45. user-select: none;
  46.  
  47. direction: ltr;
    -ms-touch-action: none;
    touch-action: none
    }
  48.  
  49. .cropper-container img {
    display: block;
    min-width: 0 !important;
    max-width: none !important;
    min-height: 0 !important;
    max-height: none !important;
    width: 100%;
    height: 100%;
    image-orientation: 0deg
    }
  50.  
  51. .cropper-wrap-box,
    .cropper-canvas,
    .cropper-drag-box,
    .cropper-crop-box,
    .cropper-modal {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    }
  52.  
  53. .cropper-wrap-box {
    overflow: hidden;
    }
  54.  
  55. .cropper-drag-box {
    opacity: 0;
    background-color: #fff;
    }
  56.  
  57. .cropper-modal {
    opacity: .5;
    background-color: #000;
    }
  58.  
  59. .cropper-view-box {
    display: block;
    overflow: hidden;
  60.  
  61. width: 100%;
    height: 100%;
  62.  
  63. outline: 1px solid #39f;
    outline-color: rgba(51, 153, 255, 0.75);
    }
  64.  
  65. .cropper-dashed {
    position: absolute;
  66.  
  67. display: block;
  68.  
  69. opacity: .5;
    border: 0 dashed #eee
    }
  70.  
  71. .cropper-dashed.dashed-h {
    top: 33.33333%;
    left: 0;
    width: 100%;
    height: 33.33333%;
    border-top-width: 1px;
    border-bottom-width: 1px
    }
  72.  
  73. .cropper-dashed.dashed-v {
    top: 0;
    left: 33.33333%;
    width: 33.33333%;
    height: 100%;
    border-right-width: 1px;
    border-left-width: 1px
    }
  74.  
  75. .cropper-center {
    position: absolute;
    top: 50%;
    left: 50%;
  76.  
  77. display: block;
  78.  
  79. width: 0;
    height: 0;
  80.  
  81. opacity: .75
    }
  82.  
  83. .cropper-center:before,
    .cropper-center:after {
    position: absolute;
    display: block;
    content: ' ';
    background-color: #eee
    }
  84.  
  85. .cropper-center:before {
    top: 0;
    left: -3px;
    width: 7px;
    height: 1px
    }
  86.  
  87. .cropper-center:after {
    top: -3px;
    left: 0;
    width: 1px;
    height: 7px
    }
  88.  
  89. .cropper-face,
    .cropper-line,
    .cropper-point {
    position: absolute;
  90.  
  91. display: block;
  92.  
  93. width: 100%;
    height: 100%;
  94.  
  95. opacity: .1;
    }
  96.  
  97. .cropper-face {
    top: 0;
    left: 0;
  98.  
  99. background-color: #fff;
    }
  100.  
  101. .cropper-line {
    background-color: #39f
    }
  102.  
  103. .cropper-line.line-e {
    top: 0;
    right: -3px;
    width: 5px;
    cursor: e-resize
    }
  104.  
  105. .cropper-line.line-n {
    top: -3px;
    left: 0;
    height: 5px;
    cursor: n-resize
    }
  106.  
  107. .cropper-line.line-w {
    top: 0;
    left: -3px;
    width: 5px;
    cursor: w-resize
    }
  108.  
  109. .cropper-line.line-s {
    bottom: -3px;
    left: 0;
    height: 5px;
    cursor: s-resize
    }
  110.  
  111. .cropper-point {
    width: 5px;
    height: 5px;
  112.  
  113. opacity: .75;
    background-color: #39f
    }
  114.  
  115. .cropper-point.point-e {
    top: 50%;
    right: -3px;
    margin-top: -3px;
    cursor: e-resize
    }
  116.  
  117. .cropper-point.point-n {
    top: -3px;
    left: 50%;
    margin-left: -3px;
    cursor: n-resize
    }
  118.  
  119. .cropper-point.point-w {
    top: 50%;
    left: -3px;
    margin-top: -3px;
    cursor: w-resize
    }
  120.  
  121. .cropper-point.point-s {
    bottom: -3px;
    left: 50%;
    margin-left: -3px;
    cursor: s-resize
    }
  122.  
  123. .cropper-point.point-ne {
    top: -3px;
    right: -3px;
    cursor: ne-resize
    }
  124.  
  125. .cropper-point.point-nw {
    top: -3px;
    left: -3px;
    cursor: nw-resize
    }
  126.  
  127. .cropper-point.point-sw {
    bottom: -3px;
    left: -3px;
    cursor: sw-resize
    }
  128.  
  129. .cropper-point.point-se {
    right: -3px;
    bottom: -3px;
    width: 20px;
    height: 20px;
    cursor: se-resize;
    opacity: 1
    }
  130.  
  131. @media (min-width: 768px) {
  132.  
  133. .cropper-point.point-se {
    width: 15px;
    height: 15px
    }
    }
  134.  
  135. @media (min-width: 992px) {
  136.  
  137. .cropper-point.point-se {
    width: 10px;
    height: 10px
    }
    }
  138.  
  139. @media (min-width: 1200px) {
  140.  
  141. .cropper-point.point-se {
    width: 5px;
    height: 5px;
    opacity: .75
    }
    }
  142.  
  143. .cropper-point.point-se:before {
    position: absolute;
    right: -50%;
    bottom: -50%;
    display: block;
    width: 200%;
    height: 200%;
    content: ' ';
    opacity: 0;
    background-color: #39f
    }
  144.  
  145. .cropper-invisible {
    opacity: 0;
    }
  146.  
  147. .cropper-bg {
    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC');
    }
  148.  
  149. .cropper-hide {
    position: absolute;
  150.  
  151. display: block;
  152.  
  153. width: 0;
    height: 0;
    }
  154.  
  155. /*.cropper-hidden {*/
    /*display: none !important;*/
    /*}*/
  156.  
  157. .cropper-move {
    cursor: move;
    }
  158.  
  159. .cropper-crop {
    cursor: crosshair;
    }
  160.  
  161. .cropper-disabled .cropper-drag-box,
    .cropper-disabled .cropper-face,
    .cropper-disabled .cropper-line,
    .cropper-disabled .cropper-point {
    cursor: not-allowed;
    }
  162.  
  163. </style>

vue中使用cropperjs进行图片裁剪上传的更多相关文章

  1. PHP+jQuery.photoClip.js支持手势的图片裁剪上传实例

    PHP+jQuery.photoClip.js支持手势的图片裁剪上传实例,在手机上双指捏合为缩放,双指旋转可根据旋转方向每次旋转90度,在电脑上鼠标滚轮为缩放,双击则顺时针旋转90度. 下面让我们来看 ...

  2. android中的文件(图片)上传

    android中的文件(图片)上传其实没什么复杂的,主要是对 multipart/form-data 协议要有所了解. 关于 multipart/form-data 协议,在 RFC文档中有详细的描述 ...

  3. 微信小程序实现图片裁剪上传(wepy)

    参考https://github.com/we-plugin/we-cropper,在wepy中实现,参考的具体例子是we-cropper/example/cutInside/ 项目上传图片时2:3的 ...

  4. 图片裁剪上传插件——jquery.photoClip.js

    想要裁剪图片上传: 需要依赖的的插件为: [jquery.photoClip.js] 插件[iscroll-zoom.js] 插件[hammer.js] 插件 [lrz.all.bundle.js] ...

  5. PHP裁剪图片并上传完整demo

    日前根据功能需求,要做一个图片裁剪上传的功能,在网上找了好久,找到了这位仁兄写的demo! 下载压缩包

  6. mui+vue+photoclip做APP头像裁剪上传

    做APP由于项目需要,需要做用户头像上传的功能,头像上传包括拍照和相册选择图片进行上传,这里使用的技术是mui封装的plus,在进行图片裁剪的时候,使用的是photoclip来进行裁剪,由于个人在使用 ...

  7. vue项目使用cropperjs制作图片剪裁,压缩组件

    项目中裁剪图片效果 代码部分:(将上传部分 封装成一个组件直接调用当前组件) <template> <div id="demo"> <!-- 遮罩层 ...

  8. HTML5 本地裁剪图片并上传至服务器(转)

    很多情况下用户上传的图片都需要经过裁剪,比如头像啊什么的.但以前实现这类需求都很复杂,往往需要先把图片上传到服务器,然后返回给用户,让用户确定裁剪坐标,发送给服务器,服务器裁剪完再返回给用户,来回需要 ...

  9. vue中的js引入图片,必须require进来

    需求:如何components里面的index.vue怎样能把assets里面的图片拿出来. 1.在img标签里面直接写上路径: <img src="../assets/a1.png& ...

随机推荐

  1. 【原创】 Docker 中 运行 ASP.NET Core 站点

    一. 建立 .NetCore 项目  a.新建项目 b.选择项目类型 c.添加控制器 d.添加视图 e.修改默认请求 f.发布 二. 准备 CentOS 环境 a.准备虚拟机 b.安装 docker ...

  2. linux 配置Apache 、PHP

    1. 安装 Apache 安装apache,首先要使用管理员权限,如果如法获取请联系您的管理员. centos: yum install httpd httpd-devel 2. 安装PHP 同样也需 ...

  3. usaco training 4.1.1 麦香牛块 题解

    Beef McNuggets题解 Hubert Chen Farmer Brown's cows are up in arms, having heard that McDonalds is cons ...

  4. 【亲测】自动构建多个指定的class并发执行:Jenkins+Maven+Testng框架

    要解决的问题:jenkins在自动构建maven项目时如何并发执行多个指定的class类 预置条件:testngXXX.xml文件已指定了多个class类 解决步骤:1.在maven项目中新建指定te ...

  5. requireJS 源码(三) data-main 的加载实现

    (一)入口 通过 data-main 去加载 JS 模块,是通过  req(cfg) 入口去进行处理的. 为了跟踪,你可以在此 加断点 进行调试跟踪. (二)  req({ })执行时,functio ...

  6. C# Web.config配置

    使用 <!--M002 バッチを起動のPath配置--> <add key="BM0002_START_PATH" value="D:\BM0002\B ...

  7. 如何移除HTML5的type=""number""的input标签的上下箭头

    初次使用input的数字输入类型type="number"时会发现默认有个上下的箭头,如下图: 很明显这里不需要这个默认箭头,那么我们如何移出这个默认样式呢? 第一种方式,写css ...

  8. Hadoop之HDFS及NameNode单点故障解决方案

    Hadoop之HDFS 版权声明:本文为yunshuxueyuan原创文章.如需转载请标明出处: http://www.cnblogs.com/sxt-zkys/QQ技术交流群:299142667 H ...

  9. JMeterPluginsCMD Command Line Tool

    There is small command-line utility for generating graphs out of JTL files. It behave just like righ ...

  10. Spring boot——logback 基础使用篇(一)

    1 简单日志配置 spring boot内部使用Commons Logging来记录日志,但也保留外部接口可以让一些日志框架来进行实现,例如Java Util Logging,Log4J2还有Logb ...