SpringMVC下用Jcrop预览裁剪上传头像

date: 2017/4/10 16:17:25
tags:

  • Jcrop
  • 预览裁剪上传头像

最近用了Jcrop实现了一个上传头像的功能,在这里记录一下,也希望能帮助到有需要的朋友。

对IE兼容性尚可,IE8和IE9不支持裁剪和预览,IE9以上可正常使用。

直接上源码:https://github.com/iftom/springmvcdemo_jcrop

下面是最终效果图:

效果预览_1

效果预览_2

效果预览_3

效果预览_4

下面是一个说明书式的介绍,按照我的步骤一步步走下去,功能就可以实现。

上传头像本身没有什么难点,但是加入了裁剪和预览功能,涉及的前端问题比较多,我途中也踩了许多坑,如果你想快速见到效果,消除对一件未知的事情的焦虑的话,我建议你先把源码下载下来,放到Tomcat里跑起来,看到真实的效果后,再着手开始写自己的代码。

详细的原理内容将来会更新。

<strong>第零步------开始前的准备</strong>

在开始这个Demo之前,你必须已经具备以下条件:

  • 可以正常访问的SpringMVC或者SpringBoot项目
  • 确保你的项目可以接受文件上传,具体的配置可以参考代码内的mvc-dispatcher-servlet.xml文件的末尾
  • 一个上传头像的HTML原型页面,如果没有可以参考代码内的页面
  • Jcrop的使用方式可参考代码内的写法,但是还请你仔细阅读Jcrop官方的Demo和文档

<strong>第一步------下载Jcrop相关文件</strong>

登录Jcrop官网,下载最新的Jcrop版本(目前是v0.9.12)。

Jcrop的官网访问速度可能很慢,不过一定能够打开,加载的时候可以看看这个线上的中文版的Demo

下载完后,把相关的css、js文件放到你的项目内并且在页面上引入即可。

别忘了还有一张名为jcrop.gif的图片。

<strong>第二步------编写前端页面</strong>

完整代码请参考personalPhoto.jsp,这里只对几个关键点说明一下。

1.因为各大浏览器的文件框的样式不同,所以页面上很少用到原生的<input type="file"/>来当做上传文件的按钮。而是把原生的文件框设置为透明(注意不是hidden隐藏),并且将其覆盖在另一个普通的button按钮上来完成样式的统一。

file按钮透明的css样式:
#fcupload{ opacity:0;/* 透明,非IE */ filter:alpha(opacity=0);/* 透明,IE*/ position: absolute; top:123px; width:135px; font-size:29px; }

你可以通过top和left来调节file按钮的位置,通过font-size来设置file按钮的大小.

下面是两张对比图来直观的感受效果:


效果预览_2

效果预览_2

2.如果你需要添加多个预览图,请参考uploadUserPhoto.css文件和personalPhoto.jsp页面中的id的前缀为preview-pane的几个标签。

<strong>第三步------编写后端代码</strong>

完整代码参考MainController.java

1.除了对图片的大小和后缀名的验证之外,你还需要验证图片是否是一张真正的图片,而不是手动改过后缀名的一张伪造的图片。方法是通过JAVA代码获取图片的宽高,如果不能获取到,则认为这是一张非法的图片。代码参考FileUploadUtil.java。(即使是一张真正的图片,依然可以嵌入非法的代码,这里没有做更多的处理,日后更新。)

2.对图片的裁剪,如果你没有时间研究,直接复制ImgCut.java当做工具类使用即可。

3.为了方便Demo的展示,我把上传的图片的地址写入了config.properties文件内,请根据自己实际情况修改存储图片地址的方式。

<strong>IE兼容性</strong>

  • IE8和IE9对文件上传支持不太友好,必须将
    工具 -> Internet选项 -> 安全 -> 自定义级别 -> 找到“其他”中的“将本地文件上载至服务器时包含本地目录路径 打开,浏览器才能取到本地图片的路径。
    <br />
    如果你遇到了什么问题,欢迎联系我,微信:15233639789
    我的Hexo博客:http://wangxiaoyu.date
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,799评论 25 707
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,702评论 0 15
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,066评论 4 62
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,737评论 1 92
  • 01 每年的2月14日来临之际,影视频道总会反复炒炒冷饭。比如除了完整看过一次《情人结》,这几年已经忘了断断续续看...
    敬夜思阅读 1,247评论 0 1