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,欢迎下载,并提出意见。

最新文章

  1. JDBC 详解(转载)
  2. 如何安装ipa文件
  3. Java中,关于字符串类型、随机验证码、 时间类型
  4. add添加
  5. nodejs-helloword案例
  6. eclipse 高亮配对的括号
  7. 资产移动盘点手持机PDA系统
  8. 集群因子(Clustering Factor)
  9. C语言基础:数组和字符串
  10. windows 8.1 pro X64安装中断
  11. 网页解析Jsoup简单使用
  12. Android系统信息
  13. Spring Boot 中如何使用 Dubbo Activate 扩展点
  14. Android studio中找不到so文件的问题:java.lang.UnsatisfiedLinkError
  15. OKL4虚拟化技术跟踪
  16. redis 中的key值过期后,触发通知事件
  17. Nginx详解三:Nginx基础篇之yum安装
  18. 【转】PropertyGrid控件中的多级显示
  19. [leetcode]Plus One @ Python
  20. Swift Tips笔记

热门文章

  1. 单片机小白学步系列(十四) 点亮第一个LED的程序分析
  2. Android利用Intent与其它应用交互
  3. Getting started with ASP.NET Core MVC and Visual Studio
  4. 高效管理 Elasticsearch 中基于时间的索引——本质是在利用滚动模式做数据的冷热分离,热索引可以用ssd
  5. C++_class_powerpoint_1.1
  6. 框架-Eureka:初识 Eureka
  7. c# winform 获取listview 选中行某列的值
  8. hdu 3729 最大匹配
  9. python 整型,布尔值,字符串相关
  10. Java常用类(I)-时间和日期