很多系统开发中都会碰到文件相关的处理,最近顺手开发一个小型文件系统的过程中碰到图片缩略图的需求,需要在显示的时候提供缩略图,下载的时候提供原图,大家直接想到的可能是java自带的图片处理类,但是处理过于复杂,无法满足需求,特别是在水印等方面支持的不太好,老样子,直接发轮子,接好了~

简单介绍下今天的轮子吧:

thumbnailator

  • google开发并维护
  • github开源
  • 不依赖于外部库
  • 操作超级简单(真的超级简单)

action

ONE.按照原图缩小(原图001.jpg-->002.jpg):

Thumbnails.of(new File("F://001.jpg"))
.size(500, 500)
.toFile(new File("F://002.jpg"));

原图大小:6848 KB --> 42 KB 新图(比例不变,见下图)


TWO.按照原图放大(原图001.jpg-->002.jpg):

Thumbnails.of(new File("F://002.jpg"))
.size(1500, 1500)
.toFile(new File("F://003.jpg"));

原图大小:42 KB --> 174 KB 新图(比例不变,如下图)


除了便捷的放大缩小,直接生成文件之外。

还可以转换文件格式、支持直接生成输出流等等,代码:

OutputStream os = ...;

Thumbnails.of("F://001.jpg")
.size(200, 200)
.outputFormat("png")
.toOutputStream(os);

相比原有的方案是不是贼方便,基本上代码不超过5行,解决了50行都不一定能解决的问题,今天分享到这里,后面见更多thumbnailator的用法分享。

其实很多时候,我们只需要鱼,而不是渔,呐,给你鱼。

TO BE CONTINUE !

关注公众号 watermelon_code 获取第一手的满足~

文件系统【图片处理】(基于thumbnailator)典藏版-壹的更多相关文章

  1. 安装基于 Linux 发行版的重要事项(流程指引)

    安装基于 Linux 发行版的重要事项(Install important issues based on the Linux distribution. (Process guidance)) 1. ...

  2. 1个多商户、多平台版 微信小程序(多商户、多平台版),影城行业、影业连锁 多商户、多平台版微信小程序。(基于多平台版,支持在业务上 可给 每个单独影城 分发定制单独的小程序版本)

    1个 影城行业 微信小程序(多商户.多平台版), 影业连锁 多商户.多平台版微信小程序.(基于多平台版,支持在业务上 可给 每个单独影城 分发定制单独的小程序版本) 资讯QQ: 876635409  ...

  3. Jquery实现图片瀑布流思路-简单版

    目录 Jquery实现图片瀑布流思路-简单版 1.预备 2.开始 1.声明 2.主体 3.窗体大小改变事件 Jquery实现图片瀑布流思路-简单版 注意:本篇文章基于知道每张图片的实际尺寸的情况下 特 ...

  4. 图片裁剪(基于RxPaparazzo)

    图片裁剪(基于RxPaparazzo) 前言:基于RxPaparazzo的图片裁剪,图片旋转.比例放大|缩小. 效果: 开发环境:AndroidStudio2.2.1+gradle-2.14.1 涉及 ...

  5. 【Python】nvshens按目录批量下载图片爬虫1.00(单线程版)

    # nvshens按目录批量下载图片爬虫1.00(单线程版) from bs4 import BeautifulSoup import requests import datetime import ...

  6. 09 基于模块wsgiref版web框架

    09 基于模块wsgiref版web框架 模块引入 真实开发中的python web程序,一般会分为两部分:       服务器程序:负责对socket服务器进行封装,并在请求到来时,对请求的各种数据 ...

  7. 搭建基于Docker社区版的Kubernetes本地集群

    Kubernetes的本地集群搭建是一件颇费苦心的活,网上有各种参考资源,由于版本和容器的不断发展,搭建的方式也是各不相同,这里基于Docker CE的18.09.0版本,在Mac OS.Win10下 ...

  8. jquery轮播图片(无插件简单版)

    轮播图(第三版)[2016-2-26] 工作中用的,改写了半透明蒙版,可以兼容ie7 <script type="text/javascript" src="htt ...

  9. caffe学习--使用caffe中的imagenet对自己的图片进行分类训练(超级详细版) -----linux

    http://blog.csdn.net/u011244794/article/details/51565786 标签: caffeimagenet 2016-06-02 12:57 9385人阅读  ...

随机推荐

  1. grafana 4 升级到 grafana 5错误处理

    遇到2个错误: 1. UNIQUE KEY 问题 INFO[07-16|15:34:36] Executing migration logger=migrator id="Remove un ...

  2. Bellman-Ford 算法

    根据之前最短路径算法里提到的,我们只要放松所有边直到其全部失效就可以得到最短路径 注意:图中不能有负圈.否则当负圈中某个点经过这个负圈的所有边的松弛操作后,这个点的的d[i]就会减小,此时会发现它可以 ...

  3. Oracle JDK与OpenJDK到底有什么不同?

    ​不知道各位developer平时是否有过疑问,Oracle JDK是什么,OpenJDK又是什么? Oracle JDK便是平常我们在windows系统上做开发使用的JDK,又称作SUN JDK.O ...

  4. 解决axios接收二进制流文件乱码问题

    1. 须将axios 配置中的responseType设置为'arraybuffer',这样就不会让表格出现乱码现象: 2. 如果要动态设置文件名则需要让后台将名字设置到响应头中,否则将是一个乱码的文 ...

  5. 【Intellij】导出 jar 包

    需要在 Intellij 导出 jar 包,一时不知道该怎么做,后来总算找到了方法,步骤如下: 1. File → Project Structure... → Artifacts → + → jar ...

  6. Java集合系列(四):HashMap、Hashtable、LinkedHashMap、TreeMap的使用方法及区别

    本篇博客主要讲解Map接口的4个实现类HashMap.Hashtable.LinkedHashMap.TreeMap的使用方法以及三者之间的区别. 注意:本文中代码使用的JDK版本为1.8.0_191 ...

  7. Handler 使用详解

    极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以 ...

  8. 线性分类 Linear Classification

    软分类:y 的取值只有正负两个离散值,例如 {0, 1} 硬分类:y 是正负两类区间中的连续值,例如 [0, 1] 一.感知机 主要思想:分错的样本数越少越好 用指示函数统计分错的样本数作为损失函数, ...

  9. postman 测试http,接口

    1.form-data: 就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开.既可以上传键值对,也可以上传文件.当上传的字段是文件时 ...

  10. 004——Netty之高性能IO(Reactor)

    一.原始方式 方法一: # 使用while循环,不断监听端口是否有新的套接字链接 while(true){ socket = accept(); handle(socket) } # 做法局限:处理效 ...