java利用thumbnailator實現不變尺寸圖片壓縮

Thumbnailator是一個開源的用于Java的縮略圖生成庫。
github地址:https://github.com/coobird/thumbnailator
如果國內github上不去可以訪問github克隆地址:https://hub.fastgit.org/coobird/thumbnailator

引用github上的簡介來介紹下Thumbnailator:

用Java制作高質量的縮略圖是一項相當困難的任務。
學習如何使用圖像I/O API,Java 2D API,圖像處理,圖像縮放技術。。。但不要害怕!Thumbnailator會幫你處理所有的事情!
Thumbnailator是一個JAR文件,不依賴于外部庫,使得開發(fā)和部署簡單易行。它也可以在Maven中央存儲庫中使用,以便于包含在Maven項目中。

截止發(fā)文maven倉庫最新版是 March 11, 2021: Thumbnailator 0.4.14

maven引入:

        <dependency>
            <groupId>net.coobird</groupId>
            <artifactId>thumbnailator</artifactId>
            <version>0.4.14</version>
        </dependency>

示例代碼:

public static void main(String[] args) {

        File picture = new File("D://Pictures/Saved Pictures/2021-06-17_14-26.png");
        BufferedImage sourceImg = null;
        try {
            sourceImg =ImageIO.read(new FileInputStream(picture));
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        
        System.out.println("圖片大小=" + String.format("%.1f",picture.length()/1024.0));
        System.out.println("圖片寬=" + sourceImg.getWidth());
        System.out.println("圖片高=" + sourceImg.getHeight());
        
        
//      try {
//          Thumbnails.of(new File("D://Pictures/Saved Pictures/test.jpg"))
//          .scale(1f) //圖片大小(長寬)壓縮比例 從0-1,1表示原圖 分辨率比例
//          .outputQuality(0.25f) //圖片質量壓縮比例 從0-1,越接近1質量越好
//          .toOutputStream(new FileOutputStream("D://Pictures/Saved Pictures/test1.jpg"));
//      } catch (IOException e) {
//          e.printStackTrace();
//      }
        //指定大小
        try {
            Thumbnails.of(picture).size(sourceImg.getWidth(), sourceImg.getHeight())
            .keepAspectRatio(false).outputFormat("jpg").toFile("D://Pictures/Saved Pictures/test2.jpg");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

注意:
上面代碼中

        try {
            Thumbnails.of(new File("D://Pictures/Saved Pictures/test.jpg"))
            .scale(1f) //圖片大?。ㄩL寬)壓縮比例 從0-1,1表示原圖 分辨率比例
            .outputQuality(0.25f) //圖片質量壓縮比例 從0-1,越接近1質量越好
            .toOutputStream(new FileOutputStream("D://Pictures/Saved Pictures/test1.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }

這一段不能達到想要的不變尺寸壓縮圖片大小的目的,壓縮之后圖片大小不小反增... 所以注釋掉了,用了下面這段

Thumbnails.of(picture).size(sourceImg.getWidth(), sourceImg.getHeight())
            .keepAspectRatio(false).outputFormat("jpg").toFile("D://Pictures/Saved Pictures/test2.jpg");

這個就支持自定義尺寸壓縮,先讀取圖片寬高再指定這個寬高壓縮,就可以實現不變尺寸壓縮圖片大小的目的。這里的picture參數可以是路徑,也可以是BufferedImage 對象,可以是File對象,可以是InputStream流,可以是URL對象十分強大好用。這里的outputFormat("jpg")最好使用jpg的格式,png的格式不會被壓縮,大概因為png是一種無損的圖片格式吧。

以上代碼把1.3M的圖片壓縮到了140kb左右,很好的實現了想要的結果,main運行如下:

圖片大小=1331.4
圖片寬=1280
圖片高=1024
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯系作者。

相關閱讀更多精彩內容

友情鏈接更多精彩內容