基于jq的图片裁剪工具cropper.js基本使用

2019.11.29
评论

一.安装

1.通过npm安装,这个方法下载的文件较为复杂,且有bug,建议以方法2安装

npm install cropper

2.通过官网下载.zip压缩包解压手动导入

官网链接:https://github.com/fengyuanchen/cropper

下载完成后,进入dist文件夹,选中 cropper.min.jscropper.min.css(这里可以选择cropper.js、cropper.css开发版),复制到自己的项目地址下,然后导入:(因为cropper基于jQuery,所以jq优先于cropper.js导入)

<link rel="stylesheet" type="text/css" href="cropper.css"/>
<script src="jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script src="cropper.min.js" type="text/javascript" charset="utf-8"></script>

二.初始化

更详细使用请访问文档:

1.html部分

//基本结构,父容器img-box规定裁剪器的大小,设置img高宽没有用
<div>
	//图片路径自己选择,这里顺带一提,如果是异步的src插入,需要单独处理,后面会细说
	<img src>
</div>

2.js部分

//裁剪器初始化
$('#image').cropper({
	aspectRatio: 16 / 9,//裁剪选择框比例
	viewMode: 1,//图片布局格式 0-无限制 1-最小为裁剪选择框 2-强制性半铺满无法缩小 3-强制性全铺满无法缩小
	guides: true,//是否显示框内虚线,默认false不显示
});

三.使用

1.裁剪后展示

//获取裁剪后的数据
var cas = $('#image').cropper('getCroppedCanvas', {
	//裁剪后高宽
	width: 98,
	height: 98,
	minWidth: 98,
	minHeight: 98,
	maxWidth: 4096,
	maxHeight: 4096,
	
	fillColor: '#fff',//空白填充
	imageSmoothingEnabled: true,//平滑处理
	imageSmoothingQuality: 'medium',//裁剪后质量
});
var base64url = cas.toDataURL('image/jpeg');//将值转换为data格式
$('#cavans-img-view').html(cas)//这里的$('#cavans-img-view')是生成的cavans标签容器,然后将数据绘制到canvas
 
//可以通过监听cropper中的cropmove事件,监听裁剪框移动触发事件,来达到移动裁剪框时实时生成canvas展示
$('#image').on('cropmove', () => {
	...//这里可以把上面的内容做为一个函数调用
});

2.裁剪后获取并且转换为需要上传到后台的格式

//由于前端上传图片一般以files的格式传递,所以这里做了转义处理。将blob格式转换为File
$('#image').cropper('getCroppedCanvas').toBlob(function(blob) {
	const files = new File(//创建File对象且配置
		[blob],//内容
		'test.jpeg', {//名称
			type: blob.type//type
		}
	);
	//这里请求因为各有不同,就以axios代表,注意axios需要单独下载,可自行搜索File图片上传
	var param = new FormData();//创建formdata对象
	param.append('data', files);//将files值放入formdata对象中取名为data
	const config = {//创建axios文件上传需要的配置
		headers: {
			'Content-Type': 'multipart/form-data'
		}
	};
	axios.post('请求地址', param, config).then(res => {
 
	})
})

3.其他细节问题

异步src插入问题

这个问题是最为常见的,因为大部分情况下用到图片裁剪的地方都是通过input图片信息获取到,然后再裁剪以及后续操作。如果在一开始没有图片时初始化cropper也就是理所当然的报错以及无法正常工作,解决方法就是在获取到图片后再初始化cropper,这里推荐使用promise来处理异步操作


cropper is not a function

这个问题我也没有直接解决,一开始使用npm下载的cropper,手动导入文件后编辑器正常使用,但是所有cropper()方法全部提示没有这个方法,后面去github官方地址下周压缩包替换文件后才解决问题,使用我个人建议非webpack类的项目单独下载引用