一.  技术背景

cropper 是一款基于 JavaScript 的图片裁剪插件,通过 Canvas 技术实现了图片的裁剪和截图功能。Canvas 是 HTML5 中新增的一个标签,用于在网页上绘制图形、动画和游戏等交互式内容。它的历史背景可以追溯到2004年,当时苹果公司推出了一款名为 WebKit 的浏览器引擎,它支持使用 JavaScript 和 CSS 来创建动态效果。随着Web技术的不断发展,人们对于在网页上实现更加复杂的图形和动画效果的需求也越来越高,于是 HTML5 标准化组织开始研发Canvas标签,以满足这一需求。Canvas 标签成为了Web开发中不可或缺的一部分,被广泛应用于游戏、数据可视化、图形编辑等领域。

二.  技术依赖

cropper 依赖于 canvas 标签的原生API,其中包含  drawImage(),strokeRect(), getImageData(), toDataUrl() 方法等。

1. getContext()

返回 canvas 的上下文,如果没有定义则返回 null。

语法:

var ctx = canvas.getContext(contextType); var ctx = canvas.getContext(contextType, contextAttributes);

参数: 这里我们只介绍 "2d":建立一个CanvasRenderingContext2D 二维渲染上下文。

2. drawImage()

提供多种在画布(canvas)上绘制图像的方式。

语法:

drawImage(image, dx, dy)

drawImage(image, dx, dy, dWidth, dHeight)

drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) |

参数:

这里我们介绍 drawImage(image, dx, dy, dWidth, dHeight) 的参数,

 image: 绘制到上下文的元素。允许任何的画布图像源;dx:image的左上角在目标画布上 X 轴坐标。dy:image的左上角在目标画布上 Y 轴坐标。dWidth:image在目标画布上绘制的宽度。dHeight:image在目标画布上绘制的高度。
复制代码

3. strokeRect()

使用当前的绘画样式,描绘一个起点在(x, y)、宽度为 w、高度为 h 的矩形方法。

语法:void ctx.strokeRect(x, y, width, height);

参数:

x:矩形起点的 x 轴坐标。y:矩形起点的 y 轴坐标。width:矩形的宽度。正值在右侧,负值在左侧。height:矩形的高度。正值在下,负值在上。
复制代码

4. getImageData()

返回一个 ImageData 对象,用来描述 canvas 区域隐含的像素数据,这个区域通过矩形表示,起始点为*(sx, sy)、宽为sw、高为sh。

语法:ImageData ctx.getImageData(sx, sy, sw, sh);

参数:

sx:将要被提取的图像数据矩形区域的左上角 x 坐标。sy:将要被提取的图像数据矩形区域的左上角 y 坐标。sw:将要被提取的图像数据矩形区域的宽度。sh:将要被提取的图像数据矩形区域的高度。
复制代码

5. toDataUrl()

方法返回一个包含图片展示的 data url。

语法:canvas.toDataURL(type, encoderOptions);

参数:

type 可选:图片格式,默认为 image/png。encoderOptions` 可选:在指定图片格式为 `image/jpeg` 或 `image/webp` 的情况下,可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 `0.92`。其他参数会被忽略。
复制代码

三.  实现流程

具体来说,cropper 主要是利用 Canvas 技术实现了以下几个方面的功能:

1. Canvas 绘制图片

cropper 可以将要裁剪的图片渲染到canvas中,通过 Canvas API  中的 drawImage() 方法实现。这样就可以在 Canvas 中显示图片,方便用户进行裁剪操作。

举个

图片裁剪工具——react-cropper相关推荐

  1. 图片裁剪工具之cropper.js

    图片裁剪工具之cropper.js cropper.js 示例Demo 具体使用示例 cropper.js Cropper.js 是一款非常强大却又简单的图片裁剪工具,它可以进行非常灵活的配置,支持手 ...

  2. cropper:图片裁剪工具

    1.图片裁剪工具:基本初始化使用: $('#image').cropper({aspectRatio: 1 / 1, // 纵横比:正方形preview: '.img-preview' // 指定预览 ...

  3. android 自定义图片裁剪,Android图片裁剪工具封装

    笔者从零开始开发Android,而且是跳过java直接使用kotlin开发,这其中的好处是可以避开java这门传统语言诸多的潜规则,难处是相比资深Android开发者少了许多可以现用的工具库.比如An ...

  4. Java之图片裁剪工具类-yellowcong

    对于图片,我们需要做的大致有,图片裁剪,添加水印和文字的操作,图片裁剪工具这个只包含了图片裁剪,后面的水印功能我会陆续添加上来 图片裁剪工具 package com.yellowcong.utils; ...

  5. JAVA图片裁剪工具类

    JAVA图片裁剪工具类: <span style="font-size:14px;">package org.oms.avatar.util;import java.a ...

  6. android启动系统的图片裁剪工具

    android启动系统的图片裁剪工具的方法 /*** 裁剪图片* @param activity 启动裁剪图片的Activity* @param uri 图片的uri路径* @param savePa ...

  7. 微信html5图片裁切,微信小程序图片裁剪工具we-cropper

    微信小程序图片裁剪工具we-cropper 一款灵活小巧的canvas图片裁剪器 在线体验 Feature 实用的API 灵活的钩子函数 多场景的demo可供参考: 常规裁剪 上传裁剪头像 裁剪网络图 ...

  8. 图片裁剪工具vueCropper跨域解决

    图片裁剪工具vueCropper跨域解决 1.报错原因:本项目的图片放在亚马逊,需求是直接拿到网络图片进行裁剪 2.解决:将图片转化成base64 Vue.prototype.getBase64Img ...

  9. Android调用手机图库选择图片并调用手机的图片裁剪工具

    /*** 获得图库图片回调标识*/public static final int GET_PIC_FROM_GALLERY = 0X100;/*** 调用手机工具编辑图片标识*/public stat ...

  10. 前端裁切图片插件之cropper介绍

    给大家介绍一个前端非常实用的依赖于jquery的图片裁切插件cropper. 因为前端无法做到图片的裁切,所以实际中需要用cropper和后台的GraphicsMagick相互配合. 先贴上cropp ...

最新文章

  1. C++中有string类,string是一个类不是一种类型,c语言中没有
  2. webpack/gulp的z-index被改写
  3. mybatis配置properties属性
  4. android sdk更新代理设置
  5. Javascript – 正则表达式
  6. java图书分析echarts_用java实现echarts里面的柱状图
  7. 判断一组checkbox中是否有被选中的
  8. 鸡啄米vc++2010系列25(滚动条控件Scroll Bar)
  9. Debian8.1 安装samba与windows共享文件,在系统重启后samba服务无法自动启动
  10. 解决微信插件wxparse图片大小不能改变的问题
  11. c语言printf分析,C语言 printf详解
  12. java编程计算圆球的体积_已知圆球体积为4/3πr³,试编写一个程序,输入圆球半径,经过计算输出圆球的体积.用JAVA编写的...明天(3月11号)要用....
  13. 云服务器搭建网站域名要备案吗,域名绑定服务器需要备案吗
  14. 低功耗蓝牙迈向工业车规级,助力充电桩和电动车智能化
  15. Educoder -- Web程序设计基础2021秋--简历表页面的制作
  16. GBASE 8C——SQL参考6 sql语法(12)
  17. Oracle数据库--从入门到装逼
  18. android仿微信下拉二楼_Android仿微信下拉列表实现
  19. 更新 MatterMost 7.1.2 至 7.10.0
  20. linux查看网卡光强,照明概念及相关术语

热门文章

  1. 前一日函数PreDate(static方法与非static的区别)
  2. 海思平台HI35XX系列内存设置
  3. 正则表达式匹配数字(可为整数或带小数包括0)
  4. STM32如何配置HAL库
  5. 浅谈系统架构设计-从架构设计原理、架构设计原则、架构设计方法展开
  6. 使用matlab的mesh函数绘制3维图形绘制
  7. 分页时高效的总页数计算
  8. Java-单机版的书店管理系统(练习设计模块和思想_系列 六 )
  9. python安装文件乱码_Python程序在Windows终端乱码解决方法
  10. CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能