转自(http://rensanning.iteye.com/blog/1545708)

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

thumbnailator-0.4.8.jar 下载地址:http://files.cnblogs.com/files/haha12/thumbnailator-0.4.8jar%E5%8C%85.rar

原图如下:

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

    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生成和操作Excel文件(转载)

    Java生成和操作Excel文件   JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该A ...

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

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

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

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

  9. .net又一个生成缩略图的方法,不变形

    生成缩略图是一个十分常用功能,找到了一个方法,重写部分代码,实用又好用,.net又一个生成缩略图的方法,不变形 /// <summary> /// 为图片生成缩略图 by 何问起 /// ...

随机推荐

  1. 查看当前linux系统位数

    linux系统也有位数之分,所以在linux上安装一些软件,比如jdk之类的就需要注意下版本. 查看linux系统位数最简单的命令(这里以redhat为例,不同版本linux命令也许不同) 命令1:g ...

  2. 三角网格(Triangle Mesh)的理解

    最简单的情形,多边形网格不过是一个多边形列表:三角网格就是全部由三角形组成的多边形网格.多边形和三角网格在图形学和建模中广泛使用,用来模拟复杂物体的表面,如建筑.车辆.人体,当然还有茶壶等.图14.1 ...

  3. Windows phone 之常用控件

    一.TextBox TextBox 显示和编辑单格式.多行文本的控件 将TextWrapping的特性设置为Wrap会使文本在到达TextBox控件的边缘时换至新行.必要时会自动扩展TextBox以便 ...

  4. ASP.NET中扩展FileUpload的上传文件的容量

    ASP.NET中扩展FileUpload只能上传小的文件,大小在4MB以内的.如果是上传大一点的图片类的可以在web.config里面扩展一下大小,代码如下 <system.web> &l ...

  5. js获取时间天数

    date2必须大于date1 function getDays(date1,date2){ /*获取之间的天数*/ /*date1,date2都是date格式*/ var getd=(date2.ge ...

  6. mysql update不能直接使用select的结果

    在sql server中,我们可是使用以下update语句对表进行更新:update a set a.xx= (select yy from b) ;但是在mysql中,不能直接使用set selec ...

  7. Activity singleInstance启动模式

    全局单例模式 如果 是新建Activity, 则新建一个Task, 然后将ActivityRecord单独放在其中 如果已经存在这个Activity, 则直接将这个Activity转到前台

  8. C# Winform C/S系统快速开发平台(源码+原创)

    C/S系统开发框架-企业版 V4.0 (Enterprise Edition) 简介: http://www.csframework.com/cs-framework-4.0.htm 适用软件:适合开 ...

  9. kernel编程规范

    1. 制表符8个空格2. 每行最长80字符3. 代码块的{放在首行,但是函数的{放在次行4. 只有一行的if块,不加{}5. 不在()前后加空格6. 正常关键字后加一个空格,if, switch, c ...

  10. 30+最佳Ajax jQuery的自动完成插件的例子

    在这篇文章中,我们将介绍35个jQuery AJAX的自动完成提示例子. jQuery 的自动完成功能,使用户快速找到并选择一定的价值.每个人都想要快速和即时搜索输入栏位,因为这个原因,许 流行的搜索 ...