zoukankan      html  css  js  c++  java
  • Java生成缩略图之Thumbnailator

    项目地址:http://code.google.com/p/thumbnailator/ 
     
     
    Thumbnailator 是一个为Java界面更流畅的缩略图生成库。从API提供现有的图像文件和图像对象的缩略图中简化了缩略过程,两三行代码就能够从现有图片生成缩略图,且允许微调缩略图生成,同时保持了需要写入到最低限度的代码量。同时还支持根据一个目录批量生成缩略图。 
    版本: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")); 
     
     
     
     
     
  • 相关阅读:
    使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength 属性设置的值。
    PowerDesigner 连接数据库,更新数据库;
    Spark Worker启动Driver和Executor工作流程
    获取spark-submit --files的文件内容
    JVM虚拟机选项:Xms Xmx PermSize MaxPermSize区别(转)
    在Java应用中通过SparkLauncher启动Spark任务
    通过thriftserver的beeline/jdbc等方式连接到SparkSQL
    Spark:java.net.BindException: Address already in use: Service 'SparkUI' failed after 16 retries!
    Spark Sql之ThriftServer和Beeline的使用
    Spark SQL读取Oracle的number类型的数据时精度丢失问题
  • 原文地址:https://www.cnblogs.com/yangzhilong/p/2880186.html
Copyright © 2011-2022 走看看