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

原图如下: 

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转换了。

Java生成缩略图之Thumbnailator的更多相关文章

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

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

  2. java图片裁剪和java生成缩略图

    一.缩略图 在浏览相冊的时候.可能须要生成相应的缩略图. 直接上代码: public class ImageUtil { private Logger log = LoggerFactory.getL ...

  3. java生成缩略图,旋转,水印,截图

    转自:http://rensanning.iteye.com/blog/1545708 感谢,方便自己查看

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

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

  5. java生成生成图片缩略图

    /** * */ package com.fkhwl.fkhserver.core.utils; import java.awt.Image; import java.awt.image.Buffer ...

  6. java 图片生成缩略图后,转化成流

    功能:图片生成缩略图后,转化成流 public class ImageUtils { /** * * @param in1 * 文件流 * @param uploadFileName * 文件名称 * ...

  7. 使用coobird Thumbnailator生成缩略图

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

  8. yii php 图片上传与生成缩略图

    今天需要做图片上传与生成缩略图的功能,把代码进行记录如下: html 视图              ($pic_action_url = $this->createAbsoluteUrl('h ...

  9. JAVA生成图片缩略图、JAVA截取图片局部内容

    package com.ares.image.test; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; ...

随机推荐

  1. 深入理解JVM : Java垃圾收集器

    如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现. Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商.不同版本的虚拟机所提供的垃圾收集器都可能会有很大差 ...

  2. Mac下Mysql启动异常["ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)"]

    在mac下使用brew安装mysql,之前没有使用过,今天启动的时候发现启动不了 huijundeMacBook-Pro:bin huijunzhang$ mysql ERROR (HY000): C ...

  3. android的color整理(一)

    很全面的颜色收集方便以后使用. <!-- 白色 --> <color name="ivory">#fffff0</color> <!-- ...

  4. hdu 4709 Herding hdu 2013 热身赛

    题意:给出笛卡尔坐标系上 n 个点,n不大于100,求出这些点中能围出的最小面积. 可以肯定的是三个点围成的面积是最小的,然后就暴力枚举,计算任意三点围成的面积.刚开始是求出三边的长,然后求面积,运算 ...

  5. 27 Remove Element

    Given an array and a value, remove all instances of that value in place and return the new length. T ...

  6. django随笔说明

    最近学习了vamei的快速Python教程,想着语法学了不用就要忘记,总要拿点东西来练练手,然后又开始学习Django,也算是顺势而为吧. 现在学Django,是跟着教程djangobook学的,内容 ...

  7. Python爬虫:常用浏览器的useragent

    1,为什么需要修改UserAgent 在写python网络爬虫程序的时候,经常需要修改UserAgent,有很多原因,罗列几个如下: 不同Agent下看到的内容不一样,比如,京东网站上的手机版网页和p ...

  8. 01UITextField基础知识

    文字属性 文字属性包括:text; placeholder(默认使用70%灰色):font:textColor;textAligment. 文字大小 文字大小包括:adjustsFontSizeToF ...

  9. java如何在一个有序的数组类插入一个数!

    第一种:依次与有序数组中的每个数进行比较,然后找到位置之后,定义一个新的数组,该信数组的长度加一,再使用system.arraycopy将于数组copy到新数组!import java.util.Ar ...

  10. DTU软硬件方案

        经过周末的思考以及已有的经验,准备将DTU研发项目命名为QN100,确定了初步的软硬件方案,产品名称大家如果有好的名字欢迎提供.     硬件:     采用STM32F101RD为主处理器, ...