Thumbnailator java 图片处理技术
Posted Mark_YPQ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Thumbnailator java 图片处理技术相关的知识,希望对你有一定的参考价值。
Thumbnailator 是一个为Java界面更流畅的缩略图生成库。从API提供现有的图像文件和图像对象的缩略图中简化了缩略过程,两三行代码就能够从现有图片生成缩略图,且允许微调缩略图生成,同时保持了需要写入到最低限度的代码量。同时还支持根据一个目录批量生成缩略图。 http://code.google.com/p/thumbnailator/ 版本:thumbnailator-0.4.2.jar 代码下载 http://download.csdn.net/detail/u012889434/9452033 原图如下: 1、指定大小进行缩放 Java代码 收藏代码 //size(宽度, 高度) /* * 若图片横比200小,高比300小,不变 * 若图片横比200小,高比300大,高缩小到300,图片比例不变 * 若图片横比200大,高比300小,横缩小到200,图片比例不变 * 若图片横比200大,高比300大,图片按比例缩小,横为200或高为300 */ Thumbnails.of("image/girls.jpg") .size(200, 300) .toFile("images/girls_200x300.jpg"); Thumbnails.of("image/girls.jpg") .size(2560, 2048) .toFile("images/girls_2560x2048.jpg"); 2、按照比例进行缩放 Java代码 收藏代码 //scale(比例) Thumbnails.of("image/girls.jpg") .scale(0.25f) .toFile("images/girls_25%.jpg"); Thumbnails.of("image/girls.jpg") .scale(1.10f) .toFile("images/girls_110%.jpg"); 3、不按照比例,指定大小进行缩放 Java代码 收藏代码 //keepAspectRatio(false) 默认是按照比例缩放的 Thumbnails.of("image/girls.jpg") .size(200, 200) .keepAspectRatio(false) .toFile("images/girls_200x200.jpg"); 4、旋转 Java代码 收藏代码 //rotate(角度),正数:顺时针 负数:逆时针 Thumbnails.of("image/girls.jpg") .size(1280, 1024) .rotate(90) .toFile("images/girls_rotate+90.jpg"); Thumbnails.of("image/girls.jpg") .size(1280, 1024) .rotate(-90) .toFile("images/girls_rotate-90.jpg"); 5、水印 Java代码 收藏代码 //watermark(位置,水印图,透明度) Thumbnails.of("image/girls.jpg") .size(1280, 1024) .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("image/watermark.jpg")), 0.5f) .outputQuality(0.8f) .toFile("images/girls_watermark_bottom_right.jpg"); Thumbnails.of("image/girls.jpg") .size(1280, 1024) .watermark(Positions.CENTER, ImageIO.read(new File("image/watermark.jpg")), 0.5f) .outputQuality(0.8f) .toFile("images/girls_watermark_center.jpg"); 6、裁剪 Java代码 收藏代码 //sourceRegion() //图片中心400*400的区域 Thumbnails.of("image/girls.jpg") .sourceRegion(Positions.CENTER, 400,400) .size(200, 200) .keepAspectRatio(false) .toFile("images/girls_region_center.jpg"); //图片右下400*400的区域 Thumbnails.of("image/girls.jpg") .sourceRegion(Positions.BOTTOM_RIGHT, 400,400) .size(200, 200) .keepAspectRatio(false) .toFile("images/girls_region_bootom_right.jpg"); //指定坐标 Thumbnails.of("image/girls.jpg") .sourceRegion(600, 500, 400, 400) .size(200, 200) .keepAspectRatio(false) .toFile("images/girls_region_coord.jpg"); 7、转化图像格式 Java代码 收藏代码 //outputFormat(图像格式) Thumbnails.of("image/girls.jpg") .size(1280, 1024) .outputFormat("png") .toFile("images/girls_1280x1024.png"); Thumbnails.of("image/girls.jpg") .size(1280, 1024) .outputFormat("gif") .toFile("images/girls_1280x1024.gif"); 8、输出到OutputStream Java代码 收藏代码 //toOutputStream(流对象) OutputStream os = new FileOutputStream("images/girls_1280x1024_OutputStream.png"); Thumbnails.of("image/girls.jpg") .size(1280, 1024) .toOutputStream(os); 9、输出到BufferedImage Java代码 收藏代码 //asBufferedImage() 返回BufferedImage BufferedImage thumbnail = Thumbnails.of("image/girls.jpg") .size(1280, 1024) .asBufferedImage(); ImageIO.write(thumbnail, "jpg", new File("images/girls_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转换了。
以上是关于Thumbnailator java 图片处理技术的主要内容,如果未能解决你的问题,请参考以下文章
Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
一:Java使用google的thumbnailator工具对图片压缩水印等做处理