Thumbnailator是一款不可多得的处理图片的第三方工具包,它写法简单到让人无法相信,Java本身也有处理图片压缩的方法,但是代码冗长到让人痛不欲生,在篇末会给出Java本身的实现方式,做下对比,已体现Thumbnailator的强大。前段时间做分期的一种相对简单的业务,需要传递用户的身份信息,相关合同信息等相关图片(做个业务传这么多图片,我是用户肯定say goodbye了,不忍吐槽),其实图片上传后不需要显示大图,只需要缩略图而已,在另外的审核页面才需要这样的原图。说了这个背景,那解约图片太大传输太慢,严重影响体验(这样说显得高大上,其实我们部署了四个节点,而且对用户资质要求严格,用户量不会很大......),就拿时间解决下图片压缩的问题,就查到了这个Thumbnailator工具包,今天顺便就把这个的主要用法写下来,以后遇到直接拿来了,原图就用女神-斯嘉丽约翰逊吧,哈哈哈。

  好,上一张原图

  其余压缩或者处理过的图片就放到demo目录下,在文末会给出地址

  这里方便都直接转换成文件了,其实可以转成流的用于传输(我是废话了...)

一.  Thumbnailator对图片的处理 

  1.Thumbnailator对图片进行指定尺寸的压缩。

 String result = "src/main/resources/images/";
2 Thumbnails.of(result + "sijili.jpg").size(200, 300).toFile(result + "image_200x300.jpg");

  2.Thumbnailator对图片进行指定比例的压缩。

String result = "src/main/resources/images/";
Thumbnails.of(result + "sijili.jpg").scale(0.5f).toFile(result + "image_0.5f.jpg");

  3.Thumbnailator对图片进行旋转。

String result = "src/main/resources/images/";
Thumbnails.of(result + "sijili.jpg").scale(1.0f).rotate(180).toFile(result + "image_r180.jpg");

4.Thumbnailator对图片进行格式转换。

String result = "src/main/resources/images/";
Thumbnails.of(result + "sijili.jpg").scale(1.0f).outputFormat("png").toFile(result + "image_sijiali.png");

5.Thumbnailator对图片进行剪裁。

String result = "src/main/resources/images/";
Thumbnails.of(result + "sijili.jpg").scale(1.0f).sourceRegion(Positions.CENTER, 400, 400).toFile(result + "image_center.png");
Thumbnails.of(result + "sijili.jpg").sourceRegion(100, 100, 100, 100).scale(1.0f).toFile(result + "image_100_4.jpg");

6.Thumbnailator对图片进行加水印操作。

String result = "src/main/resources/images/";
// watermark 参数 1.位置 2.水印图片 3.透明度
Thumbnails.of(result + "sijili.jpg").scale(1.0f).watermark(Positions.CENTER, ImageIO.read(new File(result + "warter.jpg")), 0.25f).toFile(result + "image_warter.jpg");

  7.Thumbnailator对图片进行加文字水印操作。

String result = "src/main/resources/images/";
BufferedImage bi = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.setColor(Color.LIGHT_GRAY);
g.drawRect(0, 0, 10, 10);
char[] data = "liudTest".toCharArray();
g.drawChars(data, 0, data.length, 5, 32); // watermark 参数 1.位置 2.水印 3.透明度
Thumbnails.of(result + "sijili.jpg").scale(1.0f).watermark(Positions.CENTER, bi, 1.0f).toFile(result + "image_warter_liud.jpg");

Thumbnailator对图片进行加文字水印的方式,并不推荐,可以先对文字处理成图片之后在加水印,看上面代码的冗长也不符合Thumbnailator的风格不是。

二 . Java原生对图片的处理

String result = "src/main/resources/images/";
OutputStream os = new FileOutputStream(result + "sijili_out.jpg"); Image image = ImageIO.read(new File(result + "sijili.jpg")); BufferedImage bufferedImage = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
bufferedImage.getGraphics().drawImage(image.getScaledInstance(100, 100, image.SCALE_SMOOTH), 0, 0, null); ImageIO.write(bufferedImage, "jpg",os);
os.close();

关于图片处理就先总结到这,代码的地址就放到我的github下了,地址是https://github.com/liujava/myDailyNote,欢迎下载,并提出意见。

Thumbnailator压缩图片的更多相关文章

  1. springboot整合thumbnailator实现图片压缩

    springboot整合thumbnailator实现图片压缩 前言 最近由于首页产品列表图片显示太慢,经过研究发现是用户上传的图片太大. 针对这个问题,想到的解决方案是: 1. 产品上传时,限定图片 ...

  2. java 上传图片 并压缩图片大小

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...

  3. java 上传图片 并压缩图片大小(转)

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...

  4. Java压缩图片

    阅读目录 前言 压缩的要求 实现 优点 其他功能 前言 作为靠谱的java服务端程序员,图片这个事情一直是个头疼的事情. 现在很多网站上,都有上传图片这个功能,而图片对于现在的很多手机来说,拍摄出来的 ...

  5. java上传图片并压缩图片大小

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...

  6. 使用Google Thumbnails 压缩图片

    背景说明:最近项目中需要用到一些图片文件的上传 ,但是有些图片很大,比如轮播图,大有的有几兆,这样加载一个首页都要很久,显然这样对用户体验是非常不友好的,对服务器资源将是一种浪费. 为了解决这个问题, ...

  7. java实现上传图片并压缩图片大小功能

    缩略图压缩文件jar包 <!-- 图片缩略图 --> <dependency> <groupId>net.coobird</groupId> <a ...

  8. iOS学习-压缩图片(改变图片的宽高)

    压缩图片,图片的大小与我们期望的宽高不一致时,我们可以将其处理为我们想要的宽高. 传入想要修改的图片,以及新的尺寸 -(UIImage*)imageWithImage:(UIImage*)image ...

  9. Android压缩图片到100K以下并保持不失真的高效方法

    前言:目前一般手机的相机都能达到800万像素,像我的Galaxy Nexus才500万像素,拍摄的照片也有1.5M左右.这么大的照片上传到服务器,不仅浪费流量,同时还浪费时间. 在开发Android企 ...

随机推荐

  1. ODAC (V9.5.15) 学习笔记(二十一)数据复制

    用TVirtualTable在内存中缓存TOraQuery中的数据,主要应用场景是参照其他数据,需要将TOraQuery中的数据复制到TVirtualTable,由于没有类似于TClientDataS ...

  2. 『Golang』跨平台TUI(基于文字的用户界面)库Terbox-Go文档翻译

    原文 package termbox import "github.com/nsf/termbox-go" termbox-go 是一个用于创建跨平台TUI(基于文本的用户界面)的 ...

  3. oracle 11g设置打开空表extent储存块

    sql>alter system set deferred_segment_creation=false; sql>show parameter deferred_segment_crea ...

  4. .NET 相关工具

    加密工具,反DUMP,反调试,反编译,加密代码资源内容,混淆流程,变量.Confuser is a protector/obfuscator for .NET, providing great sec ...

  5. [原]如何用Android NDK编译FFmpeg

    我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装.那么如何使用Android的ND ...

  6. base.js

    function $_id(id){return document.getElementById(id)};//$只定义为通过ID返回元素的功能 //-----------------------do ...

  7. 实例演示 kino.razor (前端 Javascript 模板工具,Razor 风格)的使用

    前言 对于习惯了 ASP.NET MVC Razor 模板引擎的人来说,比如我,一直在寻找前端 Javascript 端的 Razor 模板工具.这之前,我也了解到很多Javascript 端的模板工 ...

  8. java与javac版本不一致问题

    问题描述:    设置了环境变量JAVA_HOME为jdk1.5.0_14的安装目录,并且在PATH变量中加入了%JAVA_HOME%\bin,但在Windows命令行下,执行java -versio ...

  9. 简单的session共享的封装

    目的 session存储在缓存服务器上(各种缓存服务器上均可,本文以memcached为例),但对开发者来说,他不用关注,只需要调用request.getSession()方法即可获取到session ...

  10. 《你不知道的javascript》一、函数作用域和块作用域

    函数中的作用域 所谓函数作用域,就是属于这个函数的全部变量都可以在整个函数的范围内使用及复用. function foo(a) { var b=a; function bar(c){ var c=b* ...