安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

SpringBoot2。x整合thumbnailator图片

11月23日 先锋客投稿
  1、序
  在实际项目中,有时为了响应速度,难免会对一些高清图片进行一些处理,比如图片压缩之类的,而其中压缩可能就是最为常见的。最近,阿粉就被要求实现这个功能,原因是客户那边嫌速度过慢。借此机会,阿粉今儿就给大家介绍一些一下我做这个功能时使用的Thumbnailator库。
  Thumbnailator是一个优秀的图片处理的Google开源Java类库,专门用来生成图像缩略图的,通过很简单的API调用即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图。两三行代码就能够从现有图片生成处理后的图片,且允许微调图片的生成方式,同时保持了需要写入的最低限度的代码量。可毫不夸张的说,它是一个处理图片十分棒的开源框架。
  支持:图片缩放,区域裁剪,水印,旋转,保持比例。
  Thumbnailator官网:https:code。google。compthumbnailator
  有了这玩意,就不用在费心思使用ImageIOAPI,Java2DAPI等等来生成缩略图了。
  废话少说,直接上代码,先来看一个最简单的例子:2、代码示例2。1。新建一个springboot项目2。2。引入依赖thumbnailatordependencygroupIdnet。coobirdgroupIdthumbnailatorartifactIdversion0。4。8versiondependency2。3。controller
  主要实现了如下几个接口作为测试:RestControllerpublicclassThumbnailsController{ResourceprivateIThumbnailsServicethumbnailsS指定大小缩放paramresourceparamwidthparamheightreturnGetMapping(changeSize)publicStringchangeSize(MultipartFileresource,intwidth,intheight){returnthumbnailsService。changeSize(resource,width,height);}指定比例缩放paramresourceparamscalereturnGetMapping(changeScale)publicStringchangeScale(MultipartFileresource,doublescale){returnthumbnailsService。changeScale(resource,scale);}添加水印watermark(位置,水印,透明度)paramresourceparampparamshuiyinparamopacityreturnGetMapping(watermark)publicStringwatermark(MultipartFileresource,Positionsp,MultipartFileshuiyin,floatopacity){returnthumbnailsService。watermark(resource,Positions。CENTER,shuiyin,opacity);}图片旋转rotate(度数),顺时针旋转paramresourceparamrotatereturnGetMapping(rotate)publicStringrotate(MultipartFileresource,doublerotate){returnthumbnailsService。rotate(resource,rotate);}图片裁剪paramresourceparampparamwidthparamheightreturnGetMapping(region)publicStringregion(MultipartFileresource,Positionsp,intwidth,intheight){returnthumbnailsService。region(resource,Positions。CENTER,width,height);}}3、功能实现
  其实引入了这个Thumbnailator类库后,代码其实很少,因为我们只需要按照规则调用其API来实现即可。就个人而言,挺喜欢这种API的方式,简洁,易懂,明了。3。1指定大小缩放指定大小缩放若图片横比width小,高比height小,放大若图片横比width小,高比height大,高缩小到height,图片比例不变若图片横比width大,高比height小,横缩小到width,图片比例不变若图片横比width大,高比height大,图片按比例缩小,横为width或高为heightparamresource源文件路径paramwidth宽paramheight高paramtofile生成文件路径publicstaticvoidchangeSize(Stringresource,intwidth,intheight,Stringtofile){try{Thumbnails。of(resource)。size(width,height)。toFile(tofile);}catch(IOExceptione){e。printStackTrace();}}
  测试:
  3。2指定比例缩放
  指定比例缩放scale(),参数小于1,缩小;大于1,放大
  paramresource源文件路径
  paramscale指定比例
  paramtofile生成文件路径
  publicstaticvoidchangeScale(Stringresource,doublescale,Stringtofile){
  try{
  Thumbnails。of(resource)。scale(scale)。toFile(tofile);
  }catch(IOExceptione){
  e。printStackTrace();
  }
  }
  测试:
  3。3添加水印添加水印watermark(位置,水印,透明度)paramresource源文件路径paramp水印位置paramshuiyin水印文件路径paramopacity水印透明度paramtofile生成文件路径publicstaticvoidwatermark(Stringresource,Positionsp,Stringshuiyin,floatopacity,Stringtofile){try{Thumbnails。of(resource)。scale(1)。watermark(p,ImageIO。read(newFile(shuiyin)),opacity)。toFile(tofile);}catch(IOExceptione){e。printStackTrace();}}
  测试:
  3。4图片旋转
  图片旋转rotate(度数),顺时针旋转
  paramresource源文件路径
  paramrotate旋转度数
  paramtofile生成文件路径
  publicstaticvoidrotate(Stringresource,doublerotate,Stringtofile){
  try{
  Thumbnails。of(resource)。scale(1)。rotate(rotate)。toFile(tofile);
  }catch(IOExceptione){
  e。printStackTrace();
  }
  }
  测试:
  3。5图片裁剪图片裁剪sourceRegion()有多种构造方法,示例使用的是sourceRegion(裁剪位置,宽,高)paramresource源文件路径paramp裁剪位置paramwidth裁剪区域宽paramheight裁剪区域高paramtofile生成文件路径publicstaticvoidregion(Stringresource,Positionsp,intwidth,intheight,Stringtofile){try{Thumbnails。of(resource)。scale(1)。sourceRegion(p,width,height)。toFile(tofile);}catch(IOExceptione){e。printStackTrace();}}
  测试:
  说明:1。keepAspectRatio(booleanarg0)图片是否按比例缩放(宽高比保持不变)默认true2。outputQuality(floatarg0)图片质量3。outputFormat(Stringarg0)格式转换小结
  值得注意的是,若png、gif格式图片中含有透明背景,使用该工具压缩处理后背景会变成黑色,这是Thumbnailator的一个bug,预计后期版本会解决。
  代码地址:公众号回复【源码仓库】获得最后说两句(求关注)
  最近大家应该发现微信公众号信息流改版了吧,再也不是按照时间顺序展示了。这就对阿粉这样的坚持的原创小号主,可以说非常打击,阅读量直线下降,正反馈持续减弱。
  所以看完文章,哥哥姐姐们给阿粉来个在看吧,让阿粉拥有更加大的动力,写出更好的文章,拒绝白嫖,来点正反馈呗。
  如果想在第一时间收到阿粉的文章,不被公号的信息流影响,那么可以给Java极客技术设为一个星标。
  最后感谢各位的阅读,才疏学浅,难免存在纰漏,如果你发现错误的地方,由于本号没有留言功能,还请你在后台留言指出,我对其加以修改。
投诉 评论 转载

集齐EVHEVPHEV三张电动牌广汽本田火力全开驶入全价值赛在4月底举行的上海国际车展期间,广汽本田展台人头攒动,位于展台焦点位置的明星车型皓影锐混动e闪耀全场。这款车是当前车市中热门SUV皓影家族的最新成员,也是广汽本田旗下的第一款插……小米招募用户内测新能,MIUI13大变化出现本来大家猜测在雷军年度演讲之上MIUI13会伴随小米MIX4一起出现,但是没有想到雷军年度演讲没有到,他自己就亲自否认这一消息,称MIUI13会在年底发布。更有意思的是MIUI……满足知识传播与分享,会话精灵从企服入手在互联网时代到来之前,企业主要是通过广播、报纸、杂志与电视等方式单向传播,企业与用户之间几乎处于零交互的状态。用户遇到问题,或者对信息的更多需求,往往得不到解决和满足。步入互联……特高压光伏风电锂电储能氢能源,产业链大汇总(建议收藏)今年以来A股结构化行情愈演愈烈,选对赛道变得非常重要。政策支持力度大、发展前景广阔、盈利确定性较强,使得成长风格占据巨大优势,站在当下,不论是从政策倾向、产业趋势还是盈利状况看……医联陈俊生做线下医疗的有效补充着力行业供给侧改革对于互联网医疗这样一个万亿市场的而言,这个行业究竟该如何发展?在疫情的背景之下,又解决了什么问题,创造了哪些价值?近日,医联副总裁陈俊生接受《财富》中文版财富相对论播客节……lsblk命令详解lsblk命令用来查看block设备的信息。主要应用场景:获取wwnid,获取块设备列表,获取块设备类型(ssd,hdd),获取块设备的size等信息。数据来源:s……SpringBoot2。x整合thumbnailator图片1、序在实际项目中,有时为了响应速度,难免会对一些高清图片进行一些处理,比如图片压缩之类的,而其中压缩可能就是最为常见的。最近,阿粉就被要求实现这个功能,原因是客户那边嫌……为什么买华为的人越来越少?主要就是因为华为的5G老旗舰溢价严重,新机型由于没有5G芯片,对比同期的友商产品,竞争力很弱。华为最新的旗舰机型,也就是p50Pro了。由于美国的制裁,这款机型没有5G芯……降噪能力超强,漫步者FitPods蓝牙耳机上手评测最近两年,蓝牙耳机如雨后春笋一般,各大厂商纷纷推出自家的真无线蓝牙耳机。同时,随着主动降噪技术的推广,我们在选择蓝牙耳机的时候,更多地会考虑它的降噪能力。而且现在似乎拥有主动降……小米平板5Pro首发评测可能是最超值的高性能平板【【【前言:除了MIX4,小米平板也已回归】】】2021年8月10日晚间,雷军用第二场年度演讲拉开了小米十一周年活动的序幕,同时还发布了一系列的重磅新品。其中,最为……日本超精密微细加工一家只有7人的街道小厂,如何对超硬合金进行小姐姐有话说:转载请私信郭小姐姐获得授权:)授权后,转载请务必注明出处:【今日头条号日本制造业内参、日经TECH】:)违者必究。实现超强的直刻切削加工F……芯片量产,OPPO进入新时代?在2021年12月14日举办的OPPO未来科技大会上,OPPO的首款自研芯片正式问世。两个多月后,随着OPPOFindX5系列新品问世,这款芯片随之实现了量产。OPPO的……
有些安卓手机在APP卸载后的残留和碎片化导致安卓系统越用越卡2021年世界互联网大会恢复举行乌镇峰会采用线下线上相结合方为什么QQ只有iPhone在线,而没有其他手机的在线显示?诺基亚N139DL手机通过蓝牙认证采用翻盖设计三星S22能否重新回归高端市场,或许价格香了有可能美团支付被列入经营异常名录与工商部门失联4次被央行处罚为什么微软日渐萎靡但仍没有改变?智能会议平板市场现在发展趋势怎么样?OPPOA93s怎么样?全球Top1000计算机科学家h指数公布,中国顶尖计算机科学数据安全法数据产业变革的开始腾讯音乐娱乐集团2022Q1财报业绩稳健达预期,在线音乐付费哪里可以看到液化气罐的年限红高粱的导演是谁红高粱的导演介绍层次越高的人越喜欢这四种说话方式阿娇为何突然变胖?20年走过8个男人,谁伤她最深?闲鱼无货源卖货项目需要怎么做第3节:闲鱼无货源卖货核心思维,男子绝阳不兴我分享最稳妥的补阳方子我的一天小学英语作文带翻译暧昧很近爱情很远通话内容语音能查到吗(怎么调取通话语音取证)梦见已故的外公(梦见和死去的亲人说话)NVIDIA专坑富人?性价比之王AMD推出RX7900系列显数码知识钉钉气泡怎样设置怎么设置聊天气泡

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利