zoukankan      html  css  js  c++  java
  • Thumbnailator 缩略图

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


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

    版本:thumbnailator-0.4.2.jar 

    原图如下: 
     

    1、指定大小进行缩放 

    Java代码  收藏代码
    1. //size(宽度, 高度)  
    2.   
    3. /*   
    4.  * 若图片横比200小,高比300小,不变   
    5.  * 若图片横比200小,高比300大,高缩小到300,图片比例不变   
    6.  * 若图片横比200大,高比300小,横缩小到200,图片比例不变   
    7.  * 若图片横比200大,高比300大,图片按比例缩小,横为200或高为300   
    8.  */   
    9. Thumbnails.of("images/a380_1280x1024.jpg")   
    10.         .size(200, 300)  
    11.         .toFile("c:/a380_200x300.jpg");  
    12.   
    13. Thumbnails.of("images/a380_1280x1024.jpg")   
    14.         .size(2560, 2048)   
    15.         .toFile("c:/a380_2560x2048.jpg");  



    2、按照比例进行缩放 

    Java代码  收藏代码
    1. //scale(比例)  
    2. Thumbnails.of("images/a380_1280x1024.jpg")   
    3.         .scale(0.25f)  
    4.         .toFile("c:/a380_25%.jpg");  
    5.   
    6. Thumbnails.of("images/a380_1280x1024.jpg")   
    7.         .scale(1.10f)  
    8.         .toFile("c:/a380_110%.jpg");  



    3、不按照比例,指定大小进行缩放 

    Java代码  收藏代码
    1. //keepAspectRatio(false) 默认是按照比例缩放的  
    2. Thumbnails.of("images/a380_1280x1024.jpg")   
    3.         .size(200, 200)   
    4.         .keepAspectRatio(false)   
    5.         .toFile("c:/a380_200x200.jpg");  



    4、旋转 

    Java代码  收藏代码
    1. //rotate(角度),正数:顺时针 负数:逆时针  
    2. Thumbnails.of("images/a380_1280x1024.jpg")   
    3.         .size(1280, 1024)  
    4.         .rotate(90)   
    5.         .toFile("c:/a380_rotate+90.jpg");   
    6.   
    7. Thumbnails.of("images/a380_1280x1024.jpg")   
    8.         .size(1280, 1024)  
    9.         .rotate(-90)   
    10.         .toFile("c:/a380_rotate-90.jpg");   


     

    5、水印 

    Java代码  收藏代码
    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.   
    8. Thumbnails.of("images/a380_1280x1024.jpg")   
    9.         .size(1280, 1024)  
    10.         .watermark(Positions.CENTER, ImageIO.read(new File("images/watermark.png")), 0.5f)   
    11.         .outputQuality(0.8f)   
    12.         .toFile("c:/a380_watermark_center.jpg");  


     

    6、裁剪 

    Java代码  收藏代码
    1. //sourceRegion()  
    2.   
    3. //图片中心400*400的区域  
    4. Thumbnails.of("images/a380_1280x1024.jpg")  
    5.         .sourceRegion(Positions.CENTER, 400,400)  
    6.         .size(200, 200)  
    7.         .keepAspectRatio(false)   
    8.         .toFile("c:/a380_region_center.jpg");  
    9.   
    10. //图片右下400*400的区域  
    11. Thumbnails.of("images/a380_1280x1024.jpg")  
    12.         .sourceRegion(Positions.BOTTOM_RIGHT, 400,400)  
    13.         .size(200, 200)  
    14.         .keepAspectRatio(false)   
    15.         .toFile("c:/a380_region_bootom_right.jpg");  
    16.   
    17. //指定坐标  
    18. Thumbnails.of("images/a380_1280x1024.jpg")  
    19.         .sourceRegion(600, 500, 400, 400)  
    20.         .size(200, 200)  
    21.         .keepAspectRatio(false)   
    22.         .toFile("c:/a380_region_coord.jpg");  


     

    7、转化图像格式 

    Java代码  收藏代码
    1. //outputFormat(图像格式)  
    2. Thumbnails.of("images/a380_1280x1024.jpg")   
    3.         .size(1280, 1024)  
    4.         .outputFormat("png")   
    5.         .toFile("c:/a380_1280x1024.png");   
    6.   
    7. Thumbnails.of("images/a380_1280x1024.jpg")   
    8.         .size(1280, 1024)  
    9.         .outputFormat("gif")   
    10.         .toFile("c:/a380_1280x1024.gif");   



    8、输出到OutputStream 

    Java代码  收藏代码
    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 

    Java代码  收藏代码
    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转换了。

  • 相关阅读:
    109 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 05 问题解析--通过一个方法完成学生和专业的双向关联
    108 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 04 问题解析--数组未实例化造成的空指针异常
    107 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 03 编写方法完成学生个数统计功能
    106 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 02 新增属性完成学生信息存储
    105 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 01 新增需求及分析
    session与cookie的区别和联系
    session和cookie的区别
    Web服务器主动推送技术
    webSocket的场景应用
    TCP、Http和Socket 优劣比较
  • 原文地址:https://www.cnblogs.com/liangbo-/p/6612317.html
Copyright © 2011-2022 走看看