Thumbnailator 是一个为Java界面更流畅的缩略图生成库。从API提供现有的图像文件和图像对象的缩略图中简化了缩略过程,两三行代码就能够从现有图片生成缩略图,且允许微调缩略图生成,同时保持了需要写入到最低限度的代码量。同时还支持根据一个目录批量生成缩略图。

http://code.google.com/p/thumbnailator/

版本:thumbnailator-0.4.2.jar

原图如下: 

1、指定大小进行缩放

  1. //size(宽度, 高度)
  2. /*
  3. * 若图片横比200小,高比300小,不变
  4. * 若图片横比200小,高比300大,高缩小到300,图片比例不变
  5. * 若图片横比200大,高比300小,横缩小到200,图片比例不变
  6. * 若图片横比200大,高比300大,图片按比例缩小,横为200或高为300
  7. */
  8. Thumbnails.of("images/a380_1280x1024.jpg")
  9. .size(200, 300)
  10. .toFile("c:/a380_200x300.jpg");
  11. Thumbnails.of("images/a380_1280x1024.jpg")
  12. .size(2560, 2048)
  13. .toFile("c:/a380_2560x2048.jpg");

2、按照比例进行缩放

  1. //scale(比例)
  2. Thumbnails.of("images/a380_1280x1024.jpg")
  3. .scale(0.25f)
  4. .toFile("c:/a380_25%.jpg");
  5. Thumbnails.of("images/a380_1280x1024.jpg")
  6. .scale(1.10f)
  7. .toFile("c:/a380_110%.jpg");

3、不按照比例,指定大小进行缩放

  1. //keepAspectRatio(false) 默认是按照比例缩放的
  2. Thumbnails.of("images/a380_1280x1024.jpg")
  3. .size(200, 200)
  4. .keepAspectRatio(false)
  5. .toFile("c:/a380_200x200.jpg");

4、旋转

  1. //rotate(角度),正数:顺时针 负数:逆时针
  2. Thumbnails.of("images/a380_1280x1024.jpg")
  3. .size(1280, 1024)
  4. .rotate(90)
  5. .toFile("c:/a380_rotate+90.jpg");
  6. Thumbnails.of("images/a380_1280x1024.jpg")
  7. .size(1280, 1024)
  8. .rotate(-90)
  9. .toFile("c:/a380_rotate-90.jpg");

5、水印

  1. //watermark(位置,水印图,透明度)
  2. Thumbnails.of("images/a380_1280x1024.jpg")
  3. .size(1280, 1024)
  4. .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("images/watermark.png")), 0.5f)
  5. .outputQuality(0.8f)
  6. .toFile("c:/a380_watermark_bottom_right.jpg");
  7. Thumbnails.of("images/a380_1280x1024.jpg")
  8. .size(1280, 1024)
  9. .watermark(Positions.CENTER, ImageIO.read(new File("images/watermark.png")), 0.5f)
  10. .outputQuality(0.8f)
  11. .toFile("c:/a380_watermark_center.jpg");

6、裁剪

  1. //sourceRegion()
  2. //图片中心400*400的区域
  3. Thumbnails.of("images/a380_1280x1024.jpg")
  4. .sourceRegion(Positions.CENTER, 400,400)
  5. .size(200, 200)
  6. .keepAspectRatio(false)
  7. .toFile("c:/a380_region_center.jpg");
  8. //图片右下400*400的区域
  9. Thumbnails.of("images/a380_1280x1024.jpg")
  10. .sourceRegion(Positions.BOTTOM_RIGHT, 400,400)
  11. .size(200, 200)
  12. .keepAspectRatio(false)
  13. .toFile("c:/a380_region_bootom_right.jpg");
  14. //指定坐标
  15. Thumbnails.of("images/a380_1280x1024.jpg")
  16. .sourceRegion(600, 500, 400, 400)
  17. .size(200, 200)
  18. .keepAspectRatio(false)
  19. .toFile("c:/a380_region_coord.jpg");

7、转化图像格式

  1. //outputFormat(图像格式)
  2. Thumbnails.of("images/a380_1280x1024.jpg")
  3. .size(1280, 1024)
  4. .outputFormat("png")
  5. .toFile("c:/a380_1280x1024.png");
  6. Thumbnails.of("images/a380_1280x1024.jpg")
  7. .size(1280, 1024)
  8. .outputFormat("gif")
  9. .toFile("c:/a380_1280x1024.gif");

8、输出到OutputStream

  1. //toOutputStream(流对象)
  2. OutputStream os = new FileOutputStream("c:/a380_1280x1024_OutputStream.png");
  3. Thumbnails.of("images/a380_1280x1024.jpg")
  4. .size(1280, 1024)
  5. .toOutputStream(os);

9、输出到BufferedImage

  1. //asBufferedImage() 返回BufferedImage
  2. BufferedImage thumbnail = Thumbnails.of("images/a380_1280x1024.jpg")
  3. .size(1280, 1024)
  4. .asBufferedImage();
  5. ImageIO.write(thumbnail, "jpg", new File("c:/a380_1280x1024_BufferedImage.jpg"));

需要注意的是,对于CMYK模式的图像,由于JDK的Bug,目前还不能够处理,会出以下异常:

引用
javax.imageio.IIOException: Unsupported Image Type 
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1063) 
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1034) 
at javax.imageio.ImageReader.read(ImageReader.java:940) 
at net.coobird.thumbnailator.tasks.io.FileImageSource.read(Unknown Source)
引用
  javax.imageio.IIOException: Incompatible color conversion 
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.checkColorConversion(JPEGImageReader.java:973)

ICC profile

引用
  java.lang.IllegalArgumentException: Numbers of source Raster bands and source color space components do not match 
    at java.awt.image.ColorConvertOp.filter(ColorConvertOp.java:482) 
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.acceptPixels(JPEGImageReader.java:1268) 
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(Native Method) 
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1236) 
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1039) 
    at javax.imageio.ImageReader.read(ImageReader.java:939)

这些问题可以JAI.create()来代替ImageIO.read()解决。而高清图的内存溢出OOM问题只能使用ImageMagick转换了。

Thumbnailator 缩略图的更多相关文章

  1. java多图片上传--前端实现预览--图片压缩 、图片缩放,区域裁剪,水印,旋转,保持比例。

    java多图片上传--前端实现预览 前端代码: https://pan.baidu.com/s/1cqKbmjBSXOhFX4HR1XGkyQ 解压后: java后台: <!--文件上传--&g ...

  2. Java生成缩略图Thumbnailator(转载)

    转自(http://rensanning.iteye.com/blog/1545708) Thumbnailator 是一个为Java界面更流畅的缩略图生成库.从API提供现有的图像文件和图像对象的缩 ...

  3. Java生成缩略图之Thumbnailator

    Thumbnailator 是一个为Java界面更流畅的缩略图生成库.从API提供现有的图像文件和图像对象的缩略图中简化了缩略过程,两三行代码就能够从现有图片生成缩略图,且允许微调缩略图生成,同时保持 ...

  4. Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理

    前言 java开发中经常遇到对图片的处理,JDK中也提供了对应的工具类,不过处理起来很麻烦,Thumbnailator是一个优秀的图片处理的开源Java类库,处理效果远比Java API的好,从API ...

  5. 【Java实例】使用Thumbnailator生成缩略图(缩放、旋转、裁剪、水印)

    1 需求 表哥需要给儿子报名考试,系统要求上传不超过30KB的图片,而现在的手机随手一拍就是几MB的,怎么弄一个才30KB的图片呢? 一个简单的办法是在电脑上把图片缩小,然后截屏小图片,但现在的电脑屏 ...

  6. java图片处理(加水印、生成缩略图)等之Thumbnailator库

    Thumbnailator 是一个为Java界面更流畅的缩略图生成库.从API提供现有的图像文件和图像对象的缩略图中简化了缩略过程,两三行代码就能够从现有图片生成缩略图,且允许微调缩略图生成,同时保持 ...

  7. 使用coobird Thumbnailator生成缩略图

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  8. Thumbnailator java图片压缩,加水印,批量生成缩略图

    地址:http://code.google.com/p/thumbnailator/ 1.指定大小进行缩放 //size(宽度, 高度) /* * 若图片横比200小,高比300小,不变 * 若图片横 ...

  9. 【转】JSP使用上传文件,并生产高清缩略图示例

    原文地址:http://blog.csdn.net/yakson/article/details/9875731 前言 刚开始本来只想来测试一下Thumbnails生成缩略图的效果的,顺便来学一下js ...

随机推荐

  1. 使用现代 C++ 技术增强多核优化

    在本文中,读者将了解如何使用现代 C++ 技术跨内核并行处理数据.通过研究示例代码,下载应用和学习技术,开发人员将更好地了解英特尔® 架构和多核技术.通过学习如何处理潜在的性能瓶颈和并发性问题,可以使 ...

  2. Django与Cookie

    Cookie Cookie的由来 ​ 大家都知道HTTP协议是无状态的.无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也 ...

  3. C++笔记(1)——Anniversary

    世界太喧闹,不如敲代码. 直接上题目: Zhejiang University is about to celebrate her 122th anniversary in 2019. To prep ...

  4. 模块的概念、模块的导入方式【IMPORT 模块名、FROM 模块 IMOPRT 功能】、模块的搜索路径、链式导入&循环导入

    今日内容 1. 模块:模块的概念 2.导入的方式:import  from import 3. 环境变量:sys.path 4. 导入模块的顺序 5. 循环导入:模块间互相导入 模块 常见的四种模块: ...

  5. Linux基础命令训练题型(上)

    1.创建目录/data/dongdaxia,并且在该目录下创建文件dongdaxia.txt,然后在文件dongdaxia.txt里写入内容“inet 192.168.221.132  netmask ...

  6. Hadoop简介及架构

    狭义上来说,hadoop就是单独指代hadoop这个软件, 广义上来说,hadoop指代大数据的一个生态圈,包括很多其他的软件 2.hadoop的历史版本介绍 0.x系列版本:hadoop当中最早的一 ...

  7. 在.Net中使用RedLock实现分布式锁

    ⒈简介 RedLock 分布式锁算法由 Redis 的作者提出,大部分语言都有对应的实现,查看,RedLock.net 是 RedLock 分布式锁算法的 .NET 版实现,用来解决分布式下的并发问题 ...

  8. SVN随笔记录(一)

    svn是版本控制系统 为何使用svn? ~团队在开发同一个项目时对项目进行模块划分,在第一阶段结束后进行部分整合时,提交至服务器上合并. ~多人对同一版本的同一代码进行修改后,合并时会出现冲突,此是需 ...

  9. Minicom 简单使用

    一. 什么是minicom 1.1. minicom 是linux 下的一个串口调试工具 二. minicom的使用 2.1. 进入设置 sudo minicom -s 2.1.1. 串口设置 i. ...

  10. codeforces 816B Karen and Coffee (差分思想)

    题目链接 816B Karen and Coffee 题目分析 题意:有个人在学泡咖啡,因此看了很多关于泡咖啡温度的书,得到了n种推荐的泡咖啡温度范围[L1,R1] ,此人将有k种做法推荐的温度记为可 ...