Thumbnailator压缩图片
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压缩图片的更多相关文章
- springboot整合thumbnailator实现图片压缩
springboot整合thumbnailator实现图片压缩 前言 最近由于首页产品列表图片显示太慢,经过研究发现是用户上传的图片太大. 针对这个问题,想到的解决方案是: 1. 产品上传时,限定图片 ...
- java 上传图片 并压缩图片大小
Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...
- java 上传图片 并压缩图片大小(转)
Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...
- Java压缩图片
阅读目录 前言 压缩的要求 实现 优点 其他功能 前言 作为靠谱的java服务端程序员,图片这个事情一直是个头疼的事情. 现在很多网站上,都有上传图片这个功能,而图片对于现在的很多手机来说,拍摄出来的 ...
- java上传图片并压缩图片大小
Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...
- 使用Google Thumbnails 压缩图片
背景说明:最近项目中需要用到一些图片文件的上传 ,但是有些图片很大,比如轮播图,大有的有几兆,这样加载一个首页都要很久,显然这样对用户体验是非常不友好的,对服务器资源将是一种浪费. 为了解决这个问题, ...
- java实现上传图片并压缩图片大小功能
缩略图压缩文件jar包 <!-- 图片缩略图 --> <dependency> <groupId>net.coobird</groupId> <a ...
- iOS学习-压缩图片(改变图片的宽高)
压缩图片,图片的大小与我们期望的宽高不一致时,我们可以将其处理为我们想要的宽高. 传入想要修改的图片,以及新的尺寸 -(UIImage*)imageWithImage:(UIImage*)image ...
- Android压缩图片到100K以下并保持不失真的高效方法
前言:目前一般手机的相机都能达到800万像素,像我的Galaxy Nexus才500万像素,拍摄的照片也有1.5M左右.这么大的照片上传到服务器,不仅浪费流量,同时还浪费时间. 在开发Android企 ...
随机推荐
- LLVM
http://blog.csdn.net/snsn1984/article/details/41077763
- Java中利用标签跳出外层循环break
直接看代码: class ForLoop{ public static void main(String[] args){ //jump from outer loop outer:for(int i ...
- 实现快速迭代的引擎设计 - Capcom RE Engine的架构与实现
[译]实现快速迭代的引擎设计 - Capcom RE Engine的架构与实现 ken hu· 6 天前 原文(日文):ラピッドイテレーションを実現するゲームエンジンの設計 CEDEC2016上的一个 ...
- ffmpeg中的sws_scale算法性能测试
经常用到ffmpeg中的sws_scale来进行图像缩放和格式转换,该函数可以使用各种不同算法来对图像进行处理.以前一直很懒,懒得测试和甄 别应该使用哪种算法,最近的工作时间,很多时候需要等待别人.忙 ...
- POJ 2234 Matches Game
Matches Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7567 Accepted: 4327 Desc ...
- Unix sed实用教程系列目录[已完成]
本系列文章已经译完了,译自awk-sed@theunixschool,收获颇丰,作者没有讲明白的我做了补充,并且尝试讲的更清楚,整理成系列索引,方便学习,开篇非译文,是我为了方便后面的理解写的一篇,感 ...
- ML的灌水现象
(http://demonstrate.ycool.com/post.3137870.html) 看了几天 paper 和书,发现自己果然就是 zt好多东西就是不懂,那些人做的真快,我才建立起一种大致 ...
- 转:C/C++内存管理详解 堆 栈
http://chenqx.github.io/2014/09/25/Cpp-Memory-Management/ 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了 ...
- SNF开发平台WinForm之十四-站内发送系统信息-SNF快速开发平台3.3-Spring.Net.Framework
1运行效果: 2开发实现: .组装站内信息发送实体对象. SNFService SNFService = new SNFService(); if (this.ucUser.SelectedIds ! ...
- MyBatis知多少(20)MyBatis读取操作
上篇展示了如何使用MyBatis执行创建操作表.本章将告诉你如何使用MyBatis来读取表. 我们已经在MySQL下有EMPLOYEE表: CREATE TABLE EMPLOYEE ( id INT ...