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. web项目中获取各种路径的方法

    ~Apple   web项目中各种路径的获取 1.可以在servlet的init方法里 String path = getServletContext().getRealPath("/&qu ...

  2. JQuery EasyUi 扩展combox验证

    随笔记录一下 1.通过select text的值验证 /** * 扩展combox验证,easyui原始只验证select text的值,不支持value验证() */ (function($){ c ...

  3. View和viewController的生命周期

    View和viewController的生命周期 一.ViewController的职责 对内管理与之关联的View,对外跟其他ViewController通信和协调.对于与之关联的View,View ...

  4. iOS8毛玻璃效果

    UIBlurEffect*blueEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; UIVisualEffectView* ...

  5. 跳转APP(app之间互相通信)

    摘要 步骤: 1,添加URL Types项 2,配置URL Scheme 3,其他应用的跳转 4,参数的接收   开发IOS项目的时候,有可能会遇到两个APP应用相互调用的需求,比如说:支付宝支付.. ...

  6. ExecutorService 的理解与使用

    ExecutorService 的理解与使用  http://my.oschina.net/bairrfhoinn/blog/177639 Java线程池ExecutorService http:// ...

  7. HDU1042(N!)题解

    HDU1042(N!)题解 以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 计算N的阶乘并输出. [题目分析] 题给范围上限是10000,那么毫无疑问是大数题.之前我整理过各种 ...

  8. codeforces 几道题目

    BZOJ挂了....明天就要出发去GDKOI了....不能弃疗. 于是在cf水了几道题, 写写详(jian)细(dan)题解, 攒攒RP, 希望GDKOI能好好发挥.......  620E. New ...

  9. Eclipse开启Mybatis-config.xml配置文件智能提示

    使用Java开发的程序员一般在学习的时候,可能都会涉及到使用配置文件,在使用Eclipse类似IDE进行编辑配置配置文件的时候,如果配置文件不能自动联想,是一件比较恼人的事情.笔者这里拿mybatis ...

  10. centos无法载入 mcrypt 扩展,<br />请检查 PHP 配置,经过各种尝试,终于找到了解决办法

    百度了无数个方法都没有解决问题,也是折腾死我了,最终解决了问题 解决办法:安装php-mcrypt libmcrypt libmcrypt-devel这三个库文件 1.安装第三方yum源(默认yum源 ...