转自(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. 数据挖掘学习笔记:挖掘频繁模式、关联和相关[ZZ]

    所 谓挖掘频繁模式,关联和相关,即指在出现的数据集中找到一个经常出现的序列模式或者是一个经常出现的数据结构.就像搞CPU设计的人知道,Cache的预 取机制有流预取和指针预取,前者就是发现流模式,即发 ...

  2. LINUX 压缩目录成一个压缩文件

    #!/bin/bash file =$(date +%y%m%d%H%M)logfile=/home/目录名/backup/file.log echo "------"$(date ...

  3. 在Swift中使用libxml2

    // // main.swift // C150805_libxml2r2 // http://git.oschina.net/yao_yu/Swift2015/tree/master/C150805 ...

  4. ASP.NET MVC轻教程 Step By Step 12——客户端验证

    前面两节使用的两种数据验证方法都是在服务器端进行的,也就是提交了表单,数据回传给服务器才能验证.这样会带来两个问题,一是用户体验不好,用户提交了表单之后才知道存在问题:二是会给服务器带来额外的压力.我 ...

  5. Application+Handle+Task

    Application Application和Activity,Service一样,是android框架的一个系统组件,android系统会为每个程序运行时创建一个Application类的对象且仅 ...

  6. fineuploader 上传jquery 控件

    fineuploader 昨天用的一个jquery插件. 可参考这篇文章以前写的 file-uploader  跟 这个跟里面介绍的2个jquery 插件相比.觉得更强大写..版本号都3.9 了….. ...

  7. Asm.js: Javascript的编译目标

    正如许多开发者一样,我也为Asm.js的前景而感到兴奋不已.最近的新闻——Asm.js正 在被Firefox支持——引起了我的兴趣.同样感兴趣的还有Mozilla和Epic声明(mirror)他们已经 ...

  8. 支付宝openssl漏洞肆虐 互联网巨头称目前已修复

    支付宝openssl漏洞肆虐 互联网巨头称目前已修复 金山毒霸安全专家李铁军表示,这个漏洞使黑客可以远程读取https服务器的随机64KB内存,“只要这个黑客有耐心多捕获多分析那些64KB的数据,用户 ...

  9. Nginx+Varnish又开始新的征程了

    要自己多测试一下.总觉得机器不够用.

  10. RESTful风格的Web服务框架:Swagger

    Swagger与SpringMVC项目整合 为了方便的管理项目中API接口,在网上找了好多关于API接口管理的资料,感觉目前最流行的莫过于Swagger了,功能强大,UI界面漂亮,并且支持在线测试等等 ...