博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图片裁剪工具——JCorp
阅读量:7063 次
发布时间:2019-06-28

本文共 2221 字,大约阅读时间需要 7 分钟。

hot3.png

需求:用户上传或者修改头像的时候先将图片裁剪,固定宽度和高度,这样在不同的情景下显示的时候不会出现压缩失真。

中间折腾过的方法:

1.smartCorp.js

国外一个大神写的,根据图像的饱和度裁剪最好看的照片,刚开始以为很好用的,在官网上下载了源码,demo跑起来还可以,但是裁剪成小图片的时候裁剪不了,项目是Java的,但是demo用的是PHP,我也不会PHP,也没有运行环境,最后放弃了。

2.JS素材网上下载的插件。也是一样的问题,裁剪成小图片的后台代码运行不了,而且样式也不好看,还是选择放弃。

3.JCorp.js 这也是国外的开源软件,第一眼看上去清新大方,有点意思。还有详尽的使用方法,不错不错。但是最核心的裁剪问题依然存在。有博客上用的是后台的Java代码裁剪,demo支持直接本地读取,和写入,没有问题,但是放在网页上,图片走服务器上传是很麻烦的一个问题,除了上传原图,还要返回裁剪后的图片base64码,这样子显示是没问题了 ,但是怎么上传到阿里云服务器又是问题了。找啊找,终于找到一个博客写的是用前端H5的<canvas>画布裁剪,不走服务器,很nice。于是乎直接放在项目里用了,集成好也没问题,很开心。开心了一分钟,然后,流文件怎么上传到阿里云服务器呢,翻遍了阿里云的社区和手册也没找到答案。然后简书上的一篇文章讲清楚了要怎么处理上传,搬过来,解决好了。最后还有一个问题,如何上传到网易云呢?翻了网易云的开发文档,用断点走了几遍js文件,找到了上传的文件格式,一遍一遍的试,最后也搞好了。超级超级开心的。以下是实现代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%>        
图片上传
//点击头像框触发事件$("#portraitImage").click(function(){	 var c=document.getElementById("myCan");  	 var cxt=c.getContext("2d");  	 cxt.clearRect(0,0,c.width,c.height); 	var porsrc = this.src;	var orginimg = '';  		//" crossorigin="Anonymous"	//var image = new Image();	//image.setAttribute("crossOrigin",'Anonymous')	//image.crossOrigin = "Anonymous";	//image.src = porsrc;	$("#imgfield").html(orginimg);         //把原有的头像图片添加到可编辑框里	$("#cropbox").attr("src",porsrc);  //初始化插件方法    initJcrop(); 	layer.open({		  type: 1,		  scrollbar: false,		  title: ['头像裁剪框', 'font-size:16px;'],		  area: ['800px', '500px'],		  btn: ['保存'],		  tipsMore: true,		  content: $("#showbg"),		  yes: function(index, layero){			  subform();			  $('#showbg').css('display','none');			  layer.closeAll();		  },		  cancel: function(){ 			 $('#showbg').css('display','none');		   }		});	});

最后想了一个改进的地方,就是之前已经有头像的用户,可能会复用以前的头像,所以点击修改的时候要把原来的图片带到图片处理框里。这里遇到了图片的跨越请求问题。解决办法是在img标签添加一个属性:crossorigin="Anonymous"。

前后大概5天的时间做了这么一个小小的功能,收获了图像处理的知识,虽然理解上并没有很深,但是能运用起来,也蛮有成就感的了。记录下探索的历程。望更进一步。

JCrop官网地址:http://deepliquid.com/content/Jcrop_Download.html

转载于:https://my.oschina.net/u/3476497/blog/1833713

你可能感兴趣的文章
VUE基础插值表达式
查看>>
如何在mysql客户端即mysql提示符下执行操作系统命令
查看>>
人月神话读后感
查看>>
Learning Agile software Development
查看>>
Flask学习笔记
查看>>
浏览器缓存问题的解决
查看>>
刚学玩原生JS,自己写了一个小游戏,希望在以后能不断地进步加以改善
查看>>
【转】最牛B的编码套路
查看>>
基本服务集与扩展服务集
查看>>
WPF PasswordBox MVVM 实现
查看>>
git配置
查看>>
jq 块的拖拽效果
查看>>
AJAX编程实践
查看>>
SQLSERVER常用系统表
查看>>
Cookie
查看>>
IPC——信号量
查看>>
C++——多维数组动态开辟与释放
查看>>
Linux命令——trap
查看>>
Linux命令——blkid
查看>>
UML——从类图到C++
查看>>