`
rensanning
  • 浏览: 3509733 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:37404
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:603960
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:677498
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:86981
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:399561
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:68981
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:90291
社区版块
存档分类
最新评论

Java生成缩略图之Thumbnailator

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

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

版本:thumbnailator-0.4.2.jar

原图如下:



1、指定大小进行缩放
//size(宽度, 高度)

/*  
 * 若图片横比200小,高比300小,不变  
 * 若图片横比200小,高比300大,高缩小到300,图片比例不变  
 * 若图片横比200大,高比300小,横缩小到200,图片比例不变  
 * 若图片横比200大,高比300大,图片按比例缩小,横为200或高为300  
 */ 
Thumbnails.of("images/a380_1280x1024.jpg") 
        .size(200, 300)
        .toFile("c:/a380_200x300.jpg");

Thumbnails.of("images/a380_1280x1024.jpg") 
        .size(2560, 2048) 
        .toFile("c:/a380_2560x2048.jpg");


2、按照比例进行缩放
//scale(比例)
Thumbnails.of("images/a380_1280x1024.jpg") 
        .scale(0.25f)
        .toFile("c:/a380_25%.jpg");

Thumbnails.of("images/a380_1280x1024.jpg") 
        .scale(1.10f)
        .toFile("c:/a380_110%.jpg");


3、不按照比例,指定大小进行缩放
//keepAspectRatio(false) 默认是按照比例缩放的
Thumbnails.of("images/a380_1280x1024.jpg") 
        .size(200, 200) 
        .keepAspectRatio(false) 
        .toFile("c:/a380_200x200.jpg");


4、旋转
//rotate(角度),正数:顺时针 负数:逆时针
Thumbnails.of("images/a380_1280x1024.jpg") 
		.size(1280, 1024)
        .rotate(90) 
        .toFile("c:/a380_rotate+90.jpg"); 

Thumbnails.of("images/a380_1280x1024.jpg") 
		.size(1280, 1024)
        .rotate(-90) 
        .toFile("c:/a380_rotate-90.jpg"); 



5、水印
//watermark(位置,水印图,透明度)
Thumbnails.of("images/a380_1280x1024.jpg") 
		.size(1280, 1024)
        .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("images/watermark.png")), 0.5f) 
        .outputQuality(0.8f) 
        .toFile("c:/a380_watermark_bottom_right.jpg");

Thumbnails.of("images/a380_1280x1024.jpg") 
		.size(1280, 1024)
        .watermark(Positions.CENTER, ImageIO.read(new File("images/watermark.png")), 0.5f) 
        .outputQuality(0.8f) 
        .toFile("c:/a380_watermark_center.jpg");



6、裁剪
//sourceRegion()

//图片中心400*400的区域
Thumbnails.of("images/a380_1280x1024.jpg")
		.sourceRegion(Positions.CENTER, 400,400)
		.size(200, 200)
        .keepAspectRatio(false) 
        .toFile("c:/a380_region_center.jpg");

//图片右下400*400的区域
Thumbnails.of("images/a380_1280x1024.jpg")
		.sourceRegion(Positions.BOTTOM_RIGHT, 400,400)
		.size(200, 200)
        .keepAspectRatio(false) 
        .toFile("c:/a380_region_bootom_right.jpg");

//指定坐标
Thumbnails.of("images/a380_1280x1024.jpg")
		.sourceRegion(600, 500, 400, 400)
		.size(200, 200)
        .keepAspectRatio(false) 
        .toFile("c:/a380_region_coord.jpg");



7、转化图像格式
//outputFormat(图像格式)
Thumbnails.of("images/a380_1280x1024.jpg") 
		.size(1280, 1024)
        .outputFormat("png") 
        .toFile("c:/a380_1280x1024.png"); 

Thumbnails.of("images/a380_1280x1024.jpg") 
		.size(1280, 1024)
        .outputFormat("gif") 
        .toFile("c:/a380_1280x1024.gif"); 


8、输出到OutputStream
//toOutputStream(流对象)
OutputStream os = new FileOutputStream("c:/a380_1280x1024_OutputStream.png");
Thumbnails.of("images/a380_1280x1024.jpg") 
		.size(1280, 1024)
        .toOutputStream(os);


9、输出到BufferedImage
//asBufferedImage() 返回BufferedImage
BufferedImage thumbnail = Thumbnails.of("images/a380_1280x1024.jpg") 
		.size(1280, 1024)
		.asBufferedImage();
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转换了。
  • 大小: 20.7 KB
  • 大小: 1.1 KB
  • 大小: 2.3 KB
  • 大小: 2.2 KB
  • 大小: 23.2 KB
  • 大小: 23.3 KB
  • 大小: 27.9 KB
  • 大小: 27 KB
72
15
分享到:
评论
51 楼 尘土飞扬 2016-04-22  
如果工作量不大,直接自己写个函数比较简单
50 楼 200cc 2015-03-16  
请教up主:
在小内存的环境下,有什么处理方式/图片插件可以避免出现OOM异常吗?
49 楼 liangaspx 2015-02-10  
     
48 楼 rensanning 2014-12-05  
@Chenzh_758 转换了就没有意义了。
47 楼 Chenzh_758 2014-12-05  
CMYK模式的图像的问题,可以解决,直接把cmyk转成rgb模式就行了,代码有我博客上有
46 楼 di1984HIT 2014-09-11  
呵呵,不错~
45 楼 JINTIANBUXIAYU1 2014-09-01  
生成的大尺寸图片大小达到2M多了,有没有办法控制大小在500或者600KB左右,图片太大需要更长的时间加载,如果楼主看见了发我qq邮箱1376528532@qq.com.
44 楼 SE_XiaoFeng 2013-07-19  
真是相当的好玩啊.哈哈.
43 楼 小威哥 2013-06-17  
不清楚能否用与android平台上,有试过没?
42 楼 小威哥 2013-06-17  
嗯,不错,现在java也研究的很深入了啊。
41 楼 扣子___3 2013-04-11  
很好 支持一下
40 楼 dayangyang90 2013-01-24  
加水印的时候可以加文字的吗?
39 楼 mzh_2008beijing 2012-12-21  
so easy
38 楼 mzh_2008beijing 2012-12-21  
特别感谢。真是强大的缩略图生成组件!
37 楼 sunliyings17 2012-12-11  
你说的第一点,经过测试好像不是那样的
若图片横比200小,高比300小,不变 ,这里不是不变,而是放大了呀,我要怎么样才能让它比指定的小的时候,不变?
36 楼 newvirus 2012-07-06  
rensanning 写道
newvirus 写道
问个问题啊 为什么我eclipse中为什么总是提示不试用的参数呢?Thumbnails.of("images/a380_1280x1024.jpg"),提示of(String[])


把JDK选1.5以上。


我使用的是1.6
35 楼 宋建勇 2012-06-18  
怎么只能int型数据,Double不行吗
34 楼 sunyzc 2012-06-04  
image = Thumbnails.of(image).size(image.getWidth(), image.getHeight()).rotate(90).asBufferedImage();

多旋转几次之后分辨率什么的没变,图像变模糊了是什么情况
33 楼 sunyzc 2012-06-04  
好像做几次90度旋转后图片变模糊了啊
32 楼 iceblooded 2012-06-04  

相关推荐

    thumbnailator java用于图片压缩 生成缩略图 添加水印等

    thumbnailator(包括jar包跟api) java用于图片压缩 生成缩略图 添加水印等 这是我见过最好的压缩工具了 使用方法: Thumbnails.of(new File("path/to/directory").listFiles()) .size(640, 480) .outputFormat(...

    java图片压缩文件大小thumbnailator-0.4.8.jar.zip

    java图片压缩文件thumbnailator-0.4.8.jar.zip Thumbnailator是一个用来对图像进行处理以及缩略图的 Java类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图。有了它我们就不用在费...

    Java缩略图生成库之Thumbnailator应用说明

    Thumbnailator是一个为Java界面更流畅的缩略图生成库,从API提供现有的图像文件和图像对象的缩略图中简化了缩略过程,两三行代码就能够从现有图片生成缩略图,使用起来非常方便,需要的朋友可以了解下

    java处理图片,缩略图,添加水印,格式转换,Thumbnailator

    用java技术处理图片,生成缩略图,添加水印,切割裁剪图片,格式转换

    ThumbNailator缩略图生成实验

    JSP使用上传文件,并生产高清缩略图示例

    thumbnailator:Thumbnailator-Java的缩略图生成库

    Thumbnailator是Java的缩略图生成库。 为什么选择Thumbnailator? 用Java制作高质量的缩略图可能是一项相当困难的任务。 学习如何使用图像I / O API,Java 2D API,图像处理,图像缩放技术,但不要担心! ...

    为Java界面更流畅的缩略图生成库

    Thumbnailator 是一个为Java界面更流畅的缩略图生成库。从API提供现有的图像文件和图像对象的缩略图中简化了缩略过程,且允许微调缩略图生成,同时保持了需要写入到...同时还支持根据一个目录批量生成缩略图。里面有doc

    Thumbnailator-0.2.6

    用于生成缩略图的java包,几行代码就可以生成缩略图,希望对大家有用

    thumbnailator

    Thumbnailator 是一个用来生成图像缩略图的 Java 类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图。 支持:图片缩放,区域裁剪,水印,旋转,保持比例。

    Thumbnailator

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

    Thumbnailator.jar

    Thumbnailator是一个用来生成图像缩略图的 Java类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图。

    Thumbnailator 0.4.8.jar

    Thumbnailator是一个用来生成图像缩略图的 Java类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图。有了它我们就不用在费心思使用Image I/O API,Java 2D API等等来生成缩略图了,它...

    thumbnailator-0.4.7.jar

    Thumbnailator 是一个用来生成图像缩略图、裁切、旋转、添加水印等操作的 Java 类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图。

    thumbnailator-0.4.7

    Thumbnailator是一个用来生成图像缩略图的 Java类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图。

    thumbnailator-0.4.8.jar

    Thumbnailator 是一个用来生成图像缩略图的 Java 类库,通过很简单的代码即可生成图片缩略图

    thumbnailator-0.4.14.jar

    Thumbnailator 是一个用来生成图像缩略图的 Java 类库,通过很简单的代码即可生成图片缩略图

    Thumbnailator.rar

    Thumbnailator 是一个用来生成图像缩略图、裁切、旋转、添加水印等操作的 Java 类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图。

    thumbnailator-0.4.17.jar

    Thumbnailator 是一个用来生成图像缩略图的 Java 类库,通过很简单的代码即可生成图片缩略图

    thumbnailator-0.4.7-all.jar

    Thumbnailator 是一个用来生成图像缩略图、裁切、旋转、添加水印等操作的 Java 类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图。

Global site tag (gtag.js) - Google Analytics