广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue实现简单基础的图片裁剪功能
  • 304
分享到

Vue实现简单基础的图片裁剪功能

2024-04-02 19:04:59 304人浏览 独家记忆
摘要

目录一、准备工作二、基本结构三、添加功能onMouseDownonMouseMoveonMouseUponMouseLeave四、总结近日,在写公司项目的时候接到一个需求:对已加载的

近日,在写公司项目的时候接到一个需求:对已加载的大图中可截取部分图片用来入库或者布控,说白了就是截图嘛,于是我使用了Vue-cropper来完成。完成后因为前边也没自己实现过,所以就想看看是如何实现的。因此本文写的是最简易基础的实现方法用作学习,肯定有考虑不周的地方,还请大家谅解。工作中还是使用成熟的轮子为好。

一、准备工作

本文中我所使用的环境为vue2 。现在可以在随便一个vue项目中新建一个vue文件开始了。

二、基本结构

在本文中会使用到两个canvas,一个用来绘制我们要加载的图片,一个用来绘制矩形框选区域,就像下面这样,并且在两个canvas身上分别加上ref属性。

html

<template>
  <div>
    <div class="wrap">
      <canvas id="canvas" ref="imGCanvas"></canvas>
      <canvas
        id="drawCanvas"
        ref="drawCanvas"
      ></canvas>
    </div>
  </div>
</template>

下方样式设置两个canvas重叠

<style>
#drawCanvas {
  position: absolute;
  top: 0;
  left: 0;
}
.wrap {
  position: relative;
}
</style>

三、添加功能

首先我们需要将两个canvas的宽高都设置为相同的,由于上面没有设置canvas的宽高,因此我们在data选项中添加好需要的宽高数据 width: 500,height: 300,稍后将它设置为canvas的大小,请记住,不要用CSS设置canvas的大小,这其实是将canvas拉伸了。然后在data中添加 ctx 和 imgCtx两个属性用于保存上下文。 接着在mounted生命周期中对canvas进行操作,并且获取到要加载的图片

    let imgCanvas = this.$refs.imgCanvas;//绘制图片的canvas
    let drawCanvas = this.$refs.drawCanvas;//绘制框选款的canvas
    //设置两个canvas的宽高
    imgCanvas.width = this.width;
    imgCanvas.height = this.height;
    drawCanvas.width = this.width;
    drawCanvas.height = this.height;
    //获取两个canvas的上下文并且保存在data中
    this.ctx = drawCanvas.getContext("2d");
    this.imgCtx = imgCanvas.getContext("2d");
    //加载图片
    let img = new Image();
    img.src = "https://www.auok.ltd/background.jpg";
    img.crossOrigin = "anonymous";
    img.onload = () => {
      console.log("加载完成", img);
      //图片加载完成后开始绘制图片
      this.imgCtx.drawImage(img, 0, 0, this.width, this.height);
    };

以上步骤搞定后现在的页面中应该如下面一样了

接下来让我们给drawCanvas添加事件监听。需要监听的事件有以下几个

  • 鼠标按下
  • 鼠标抬起
  • 鼠标移动
  • 鼠标移出

我们来改写一下模板结构,像下面这样

<template>
  <div>
    <div class="wrap">
      <canvas id="canvas" ref="imgCanvas"></canvas>
      <canvas
        id="drawCanvas"
        ref="drawCanvas"
        @mousedown="onMouseDown"
        @mousemove="onMouseMove"
        @mouseup="onMouseUp"
        @mouseleave="onMouseLeave"
      ></canvas>
    </div>
    <img :src="curSrc" alt="" style="margin: 10px 10px 0 0" />
    <canvas id="outCanvas"></canvas>
  </div>
</template>

然后在methods中添加对应的onMouseDown、onMouseUp、onMouseMove、onMouseLeave四个方法。然后我们来编写这四个方法就好

onMouseDown

这个方法是鼠标按下事件的监听处理函数。主要负责以下几点

  • 清除drawCanvas
  • 获取鼠标按下时的位置
  • 设置一下绘制线条的样式

代码如下: 编写这个方法前我们要现在data中增加ddownPoint和down两个属性用来存储点的位置标识鼠标是否按下

 onMouseDown(e) {
      console.log("鼠标按下", e.offsetX, e.offsetY);
      this.downPoint = [e.offsetX, e.offsetY];
      this.down = true;
      this.ctx.strokeStyle = "#fff";
      this.ctx.lineWidth = 2;
    }

onMouseMove

鼠标按下了,下面就要移动了。此方法是鼠标移动的监听处理函数。负责以下几点

  • 获取鼠标移动的位置
  • 绘制矩形选框
  • 绘制遮罩层
   onMouseMove(e) {
   //鼠标未按下不执行操作
      if (!this.down) {
        return;
      }
    console.log("鼠标移动", e.offsetX, e.offsetY);
    //当前鼠标移动的位置
    let movePoint = [e.offsetX, e.offsetY];
      this.ctx.fillStyle = "rgba(0,0,0,.5)";//设置遮罩层填充颜色
      //清空drawCanvas
      this.ctx.clearRect(0, 0, this.width, this.height);
      //使用设置的填充颜色来设置drawCanvas的颜色
      this.ctx.fillRect(0, 0, this.width, this.height);
      //清除指定区域的颜色,因为需要绘制的选框中间是没有颜色的,不然的话选框区域都是遮罩层的颜色。如下图
      this.ctx.clearRect(
        downPoint[0],
        downPoint[1],
        movePoint[0] - this.downPoint[0],
        movePoint[1] - this.downPoint[1]
      );
      //绘制描边矩形 四个参数是x坐标 , y坐标 , 矩形的长,矩形的宽
      this.ctx.strokeRect(
        downPoint[0],
        downPoint[1],
        movePoint[0] - this.downPoint[0],
        movePoint[1] - this.downPoint[1]
      );
    },

onMouseUp

这个方法是鼠标松开按键的事件处理函数,主要负责

  • 获取鼠标松开的坐标
  • 获取框选部分的图片 上面的步骤中截图区域已经选择完成。接下来就是要获取截图部分的图片了。

代码如下

    onMouseUp(e) {
        console.log("鼠标抬起", e.offsetX, e.offsetY);
        //获取坐标
        let upPoint = [e.offsetX, e.offsetY];
        //重置鼠标按下状态
        this.down = false;
        //获取指定区域的图片数据
        let cutImgData = this.imgCtx.getImageData(
          this.downPoint[0],
          this.downPoint[1],
          upPoint[0] - this.downPoint[0],
          upPoint[1] - this.downPoint[1]
        );
        //获取返回的图片数据中的宽高
        let { width, height } = cutImgData;
        console.log(cutImgData);
        //创建一个用于放置图片的canvas用来输出图片
        let outCanvas = document.createElement("canvas");
        let outCtx = outCanvas.getContext("2d");
        outCanvas.height = height;
        outCanvas.width = width;
        //将图片放置到canvas上
        outCtx.putImageData(cutImgData, 0, 0);
        //以blob的形式输出图片
        outCanvas.toBlob((blob) => {
          this.curSrc = URL.createObjectURL(blob);
    }

通过调用getImageData获取了图片指定区域的数据,然后将获取到的图片数据使用putImageData放到创建好的canvas中,再通过canvas的toBlob或者toDataURL方法就可以输入图片的二进制数据或者base64字符串了,这里我用的是blob,再通过URL.createObjectURL获取到图片的本地地址,这种形式:blob:Http://localhost:8080/e835d581-cdfe-48ff-b562-743bfcd4970d,可以用来显示或者上传。 在模板中添加一个img标签,并且在data中添加cruSrc属性,最后就如下图

  <img :src="curSrc" alt="" style="margin: 10px 10px 0 0" />

onMouseLeave

这个方法是在鼠标移出canvas区域后重置canvas的状态的。将鼠标状态down重置为false,然后再清除canvas。

四、总结

如果要实际的实现一个和vue-cropper功能差不多的是比较复杂,要考虑很多东西,比如图像的缩放比例、选框的移动及大小调整之类的。这些部分还没有写。

以上就是Vue实现简单基础的图片裁剪功能的详细内容,更多关于Vue图片裁剪的资料请关注编程网其它相关文章!

--结束END--

本文标题: Vue实现简单基础的图片裁剪功能

本文链接: https://www.lsjlt.com/news/167798.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue实现简单基础的图片裁剪功能
    目录一、准备工作二、基本结构三、添加功能onMouseDownonMouseMoveonMouseUponMouseLeave四、总结近日,在写公司项目的时候接到一个需求:对已加载的...
    99+
    2022-11-13
  • 基于JavaScript实现图片裁剪功能
    目录一、图片文件的上传和读取二、图片展示和蒙层处理CSS clip-path三、裁剪框展示裁剪框的缩放点cursor 鼠标样式四、裁剪框移动事件五、裁剪框缩放操作六、完成裁剪功能dr...
    99+
    2023-02-21
    JavaScript实现图片裁剪JavaScript图片裁剪 JavaScript图片
  • Vue图片裁剪功能实现代码
    目录一、效果展示:1、表单的图片上传项:2、裁剪框页面二、代码部分1、首先安装Vue-Cropper,基于此组件的基础上开发的裁剪页面2、裁剪弹窗的组件编写:3、【图片上传表单项】组...
    99+
    2022-11-13
  • cropperjs实现裁剪图片功能
    本文实例为大家分享了cropperjs实现裁剪图片功能的具体代码,供大家参考,具体内容如下 cropperjs (裁剪图片) vue版本 // 下载 // npm install c...
    99+
    2022-11-13
  • 基于JavaScript如何实现图片裁剪功能
    本篇内容介绍了“基于JavaScript如何实现图片裁剪功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、图片文件的上传和读取使用文件上...
    99+
    2023-07-05
  • 基于Vue如何实现移动端图片裁剪组件功能
    小编给大家分享一下基于Vue如何实现移动端图片裁剪组件功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!最近项目上要做一个车牌识别的功能。本来以为很简单,只需要将图片扔给后台就可以了,但是...
    99+
    2022-10-19
  • Android图片裁剪功能实现代码
    在Android应用中,图片裁剪也是一个经常用到的功能。Android系统中可以用隐式意图调用系统应用进行裁剪,但是这样做在不同的手机可能表现出不同的效果,甚至在某些奇葩手机上...
    99+
    2022-06-06
    Android
  • cropperjs怎么实现裁剪图片功能
    这篇“cropperjs怎么实现裁剪图片功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“cropperjs怎么实现裁剪图片...
    99+
    2023-06-29
  • java实现的图片裁剪功能示例
    本文实例讲述了java实现的图片裁剪功能。分享给大家供大家参考,具体如下:PicCut.java:package Tsets;import java.awt.Rectangle;import java.awt.image.BufferedI...
    99+
    2023-05-31
    java 图片 裁剪
  • Node+UDP实现图片裁剪功能的方法
    这篇文章将为大家详细讲解有关Node+UDP实现图片裁剪功能的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。UDP服务器可以用于一些特殊数据的(高效)传输,例如图片、视频和音频信息等我见过一些大佬用U...
    99+
    2023-06-08
  • Java是怎么实现图片裁剪功能的
    今天就跟大家聊聊有关Java是怎么实现图片裁剪功能的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言下面提供将图片按照自定义尺寸进行裁剪的Java工具类,一如既往的实用主义。Mav...
    99+
    2023-06-29
  • Android实现拍照、选择图片并裁剪图片功能
    一、 实现拍照、选择图片并裁剪图片效果 按照之前博客的风格,首先看下实现效果。      二、 uCrop项目应用 想起之前看到的Yalant...
    99+
    2022-06-06
    选择 图片 Android
  • Vue实现裁切图片功能
    本文实例为大家分享了Vue实现裁切图片的具体代码,供大家参考,具体内容如下 项目需求做一个身份证的裁切功能 原生开发的话,这种功能挺容易实现的 Web的没有做过相关功能,百度了一下...
    99+
    2022-11-13
  • 微信小程序实现图片裁剪功能
    微信小程序实现图片裁剪功能随着微信小程序的快速发展,越来越多的开发者开始探索小程序的潜力。其中,图片处理功能是小程序中常见的需求之一。本文将介绍如何在微信小程序中实现图片裁剪功能,并提供具体的代码示例,帮助开发者快速实现这一功能。准备工作在...
    99+
    2023-11-21
    图片 微信小程序 裁剪
  • Android ImageView实现图片裁剪和显示功能
    首先在layout布局中设置按钮和一个ImageView <Button android:id="@+id/selectimagebtn" android:la...
    99+
    2022-06-06
    图片 Android
  • 微信小程序图片裁剪功能的实现
    文章目录 图片上传与处理图片尺寸适配图片显示与裁剪框裁剪框的拖动与缩放增加canvas并裁剪图片保存图片到相册总结 在之前的博文中,已经介绍了如何使用在前端开发中,实现较方便自由的图片裁剪功能,可见博文: 如何一步步实现图片...
    99+
    2023-08-17
    微信小程序 小程序 前端 javascript
  • Java实现图片裁剪功能的示例详解
    目录前言Maven依赖代码验证一下前言 本文提供将图片按照自定义尺寸进行裁剪的Java工具类,一如既往的实用主义。 Maven依赖 <dependency>...
    99+
    2022-11-13
  • 基于RxPaparazzo实现图片裁剪、图片旋转、比例放大缩小功能
    前言:基于RxPaparazzo的图片裁剪,图片旋转、比例放大|缩小。效果: 开发环境:AndroidStudio2.2.1+gradle-2.14.1 涉及知识:Material Design(CardView+Coo...
    99+
    2023-05-31
    rxpaparazzo 图片裁剪 para
  • 基于Html5 canvas如何实现裁剪图片和马赛克功能
    这篇文章主要介绍了基于Html5 canvas如何实现裁剪图片和马赛克功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.核心功能  此组件功能包含:    图片裁剪(裁剪...
    99+
    2023-06-09
  • Java中怎么实现一个图片剪裁功能
    Java中怎么实现一个图片剪裁功能,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Listing1: 引入的类import java.awt.Graphics;&n...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作