img文件编辑_好程序员分享javascript实现自由编辑图片代码详解

好程序员分享javascript实现自由编辑图片代码详解,当下我们项目中需要一个可自由编辑图片的功能,当图片可能出现需要频繁编辑,同时能满足发现裁剪不满意想要微调的时候,会发现如果我们处理图片按照平常的习惯,如裁剪后上传服务器或者转base64,都是不符合需求的。那么该怎么处理比较好呢?如何以尽量少的网络请求、少占用存储来解决应用场景呢?那么,便想到了只用纯数据来跟我们的功能打交道。

c75539b693b9144d74033a9476c01c5c.png

先安利个裁图神器cropperjs,个人认为是个易上手,配置和api方法蛮齐全的一个组件库。

项目内引入,一定不要漏了引用样式

import Cropper from 'cropperjs';import 'cropperjs/dist/cropper.css';

这里我们以react为例

 this.state = {width: 640, //图片展示宽height: 360, //图片展示高imgWidth: 640, //图片实际宽imgHeight: 360, //图片实际高imgLeft: 0, //图片左偏移imgTop: 0, //图片上偏移editing: false //是否编辑中}//展示图片的基本dom结构,我们使用外div内img的形式,来跟数据结合控制裁剪图片的展示const { width, height, imgWidth, imgHeight, imgLeft, imgTop, editing } = this.state;const containerStyle = {width: `${width}px`,height: `${height}px`}const imgStyle = {width: `${imgWidth}px`,height: `${imgHeight}px`,left: `${imgLeft}px`,top: `${imgTop}px`}.img-container {overflow: hidden;position: relative;}.crop-img {position: absolute;left: 0;top: 0;}

简单来说就是外层元素控制裁剪展示的宽高,同时根据项目需求的元素定位也挂在这,内部img挂载图片实际大小和偏移。

cropperjs初始化后的元素,是会与初始化对象img处在同一dom层级,也就是说如果我们直接对展示img进行初始化的话,编辑区域展示将会受父元素,如图,放大图片时候会不方查看超出部分

所以在这里,为了图片编辑的自由度,建议分开展示dom与用以初始化cropper对象的dom,在这里编辑区域为全屏幕为例,根据项目实际功能区域进行调整

.edit-container {position: absolute;left: 0;right: 0;top: 0;bottom: 0;}
//cropper初始化 this.myRef = React.createRef(); this.myCropper = new Cropper(this.myRef.current, options);//options配置const options = {dragMode: 'move', //使裁剪时图片可拖动background: false, //因为我们现在是全屏可编辑,需要隐藏掉默认的背景}//当然还有许多常见的配置项,如编辑框尺寸比例等,大家可自行查看api//裁剪保存save() {const cropBoxData = this.myCropper.getCropBoxData(); //获取裁剪框数据const canvasData = this.myCropper.getCanvasData(); //获取图片数据 this.setState({width: cropBoxData.width,height: cropBoxData.height,imgLeft: canvasData.left - cropBoxData.left,imgTop: canvasData.top - cropBoxData.top,imgWidth: canvasData.width,imgHeight: canvasData.height})}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值