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