前端js操作截取/裁剪图片

2023-05-16

前端js操作截取/裁剪图片

主要使用canvas相关api来实现图片裁剪

在这里插入图片描述

在vue中使用

<template>
  <div>
    <img :src="imgSrc"/>
    <div>
      <h2>裁剪后的图片</h2>
      <img :src="handleSrc" height="100">
    </div>
  </div>
</template>

<script>
import logo from '@/assets/imgtest1.png'
import defaultImg from '@/assets/default.png'
export default {
  name: 'ImgUtils',
  data () {
    return {
      imgSrc: logo,
      handleSrc: null,
      defaultImg
    }
  },
  async created () {
    try {
      this.handleSrc = await this.handleImg({
        src: this.imgSrc,
        rect: {
          x: 0, // 截取方格左上角横坐标
          y: 0, // 截取方格左上角纵坐标
          width: 50, // 截取方格宽度
          height: 200 // 截取方格高度
        }
      })
    } catch (err) {
      console.error(err)
      this.handleSrc = this.defaultImg
    }
  },
  methods: {
    handleImg (opts) {
      return new Promise((resolve, reject) => {
        const { src, rect } = opts
        if (!src || !rect) {
          reject(new Error('opts params Error!'))
        }
        const img = new Image()
        img.src = src
        img.onload = function () {
          const canvas = document.createElement('canvas')
          const ctx = canvas.getContext('2d')
          const { x, y, width, height } = rect
          canvas.width = width
          canvas.height = height
          ctx.drawImage(this, x, y, width, height, 0, 0, width, height)
          const url = canvas.toDataURL('image/png')
          resolve(url)
        }
        img.onerror = function (err) {
          reject(err)
        }
      })
    }
  }
}
</script>

handleImg封装为Promise函数,resolve的值为裁剪后图片的url

  • 核心方法drawImage

    具体可参考MDN文档CanvasRenderingContext2D.drawImage()

    该方法有三个重载实现

    代码中使用的是一个9参数的实现

    void ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);
    

    imge可以是HTMLImageElement,就是img dom对象,其他八个参数表示的含义如下图所示

在这里插入图片描述

注意:使用该方法的前提是无需设置原图大小,即使用image图像的默认大小,如果源图像比例有缩放,参数opts中对应的rect需要作出对应调整,或者对图源进行调整,使用文档上已经渲染的dom,而不是new一个新的Image对象

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端js操作截取/裁剪图片 的相关文章

  • FreerRTOS中的链表概述

    FreerRTOS中的链表概述 一 链表简介二 FreeRTOS中定义过的链表三 任务块中的链表项 一 链表简介 1 FreeRTOS中的链表是结构体模拟的双向链表 xff0c 其链表的内容为 xff1a xff08 1 xff09 lis
  • 【 MDK keil5 生成 .hex文件 .bin文件 stm32】

    MDK keil5 生成 hex文件 bin文件 stm32 1 生成hex文件2 生成bin文件2 1第一种方法2 2高级方式 1 生成hex文件 hex文件的生成通常是默认不选择生成的 xff0c MDK这个IDE对于hex生成还是很友
  • Ubuntu 18.04 拨号上网 PPPoE

    Ubuntu 18 04 拨号上网 PPPoE 解决办法 校园网是深澜系统 xff0c 使用拨号上网进行认证 xff0c 之前在Ubuntu 16 04下拨号比较方便 xff0c 但是到了Ubuntu 18 04下和Ubuntu 16 04
  • IROS2019多传感器融合SLAM方向

    Stereo Visual Inertial LiDAR Simultaneous Localization and Mapping Abstract Simultaneous Localization and Mapping SLAM i
  • C++字符数组中的‘\0’问题

    string 对象没有 0 char text 字符串数组若没有 39 0 39 xff0c 只能当做数组处理 xff0c 若有 39 0 39 xff0c 可以看做字符串 xff0c 可以cou lt lt text xff0c 否则不可
  • IROS2020:全局位置量测与基于优化的VIO紧耦合融合

  • Ubuntu 测试两台电脑之间的网速

    Ubuntu 测试两台电脑之间的网速 前言安装使用服务器端客服端 后续 前言 在Linux下面可以使用命令ping测试两台电脑之间的延迟 类似于下面这样 span class token function ping span 192 168
  • PX4使用FPV DShot电调

    Pixhawk 4使用T MOTOR FPV DShot电调接线教程 前言DShot的优点 接线参数设置开启FMU输出启用 DShot 测试后续 由于种种原因 xff0c 博客停更了好久 xff0c 从现在开始准备把停更许久的博客更新起来
  • 解决rosdep update一直timeout的问题

    解决rosdep update一直timeout 错误内容解决办法 最近在配cartographer的时候需要 rosdep update xff0c 但是一直显示timeout xff0c 简直都要崩溃了 xff0c 一行命令跑一天 xf
  • qgc通过mavros连接到飞控

    qgc通过mavros连接到Pixhawk飞控 mavros设置QGC设置 mavros确实是一个不错的工具 xff0c 在机载电脑上进行无人机开发的时候 xff0c 有时候想调飞控的参数看一下飞控的一些信息 xff0c 但是直接接飞控又不
  • pixhawk使用WiFi模块

    pixhawk使用WiFi 前期准备刷固件安装刷固件软件进入刷固件模式下载固件刷固件 使用接线飞控参数更改使用方法 在使用pixhawk的时候有时候在无人机上不方便搭载处理器 xff0c 这个时候进行外部控制 或者QGC有线方式连接无人机不
  • cartographer+pixhawk飞控+px4固件+ros kinetic+HOKUYO utm-30lx实现无GPS下的起飞

    cartographer 43 pixhawk飞控 43 px4固件 43 ros kinetic实现无GPS下的起飞 cartographer配置launch文件建立更改配置文件 飞控设置测试 前面的博客讲了cartographer和ma
  • 结合无人机室内导航谈谈3DVFH+算法

    无人机室内导航路径规划 障碍规避 在浏览PX4开发手册过程中看见里面提到的一种障碍规避算法 3DVFH 43 该算法在之前做本科毕设时候有所接触 xff0c 不过当时是进行了2D的Matlab仿真 xff0c down个代码改改障碍物形状
  • px4通过QGC地面站测试电机

    px4通过QGC地面站测试电机 打卡控制台测试电机 在安装好旋翼过后其中比较重要的一步就是测试电机的位置和转向是否安装正确 通过地面站的mavlink控制台可以依次对每个电机进行测试 测试过程需要连接电池 xff0c 电机会转 xff0c
  • 提高mavros中IMU话题的发布频率

    提高mavros中IMU话题的发布频率 提高波特率提高方法命令行方式原始IMU数据飞控计算过后的IMU数据总结 更改启动文件 在上位机上很多时候都需要用到无人机的IMU信息 xff0c 我用的飞控硬件是Pixhawk 4 xff0c 感觉I
  • 安装Windows和Ubuntu双系统

    这几天开始动手做毕设啦 xff0c 打算好好过把Linux瘾 xff0c 接下来便是这两天我在联想电脑上安装Windows10和Ubuntu16 04双系统的过程 一 安装方式 一般在Windows下体验Linux的方式有三种 xff1a
  • PX4飞控Avoidance功能包2018论文分享

    PX4飞控Avoidance功能包2018论文分享 PX4官方Avoidance 2018论文引言 xff08 略 xff09 摘要简介相关工作全局障碍规避局部障碍规避对本文启发 方法 3DVFH 算法建立记忆将直方图重投影到3D点从3D点
  • RTAB-Map:适用大范围长周期的开源雷达视觉SLAM库

    RTAB Map xff1a 适用大范围长周期的开源雷达视觉SLAM库 摘要IntroductionROS上的主流SLAM算法基于雷达的算法GmappingHectorICP MapperKarto SLAM和CartographerBLA
  • Ubuntu 16.04安装RealSense ROS功能包

    RealSense ROS安装 安装SDK二进制安装源码编译安装 安装ros包测试 这个包支持D400 系列 SR300 和T265相机 安装SDK 个人推荐源码编译安装 xff0c 源码编译安装比较麻烦 二进制安装 添加RealSense

随机推荐