java實現圖片壓縮
阿新 • • 發佈:2020-12-19
簡介
我們在專案中經常會遇到圖片上傳的需求,如商品圖片,但圖片太大的話,在客戶端載入太慢影響使用者體驗,所有一般會將圖片進行壓縮。
實現
原圖
新增依賴
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
按質量壓縮
import java.io.File; import java.io.FileOutputStream; import net.coobird.thumbnailator.Thumbnails; public class Client { public static void main(String[] args) throws Exception { Thumbnails.of(new File("D:/showqrcode.jpg")) .scale(1f) //圖片大小(長寬)壓縮比例 從0-1,1表示原圖 .outputQuality(0.5f) //圖片質量壓縮比例 從0-1,越接近1質量越好 .toOutputStream(new FileOutputStream("D:/showqrcode_50.jpg")); } }
壓縮後圖片
圖片大小從665KB壓縮到了77KB。
按比例縮放
import java.io.File; import java.io.FileOutputStream; import net.coobird.thumbnailator.Thumbnails; public class Client2 { public static void main(String[] args) throws Exception { Thumbnails.of(new File("D:/showqrcode.jpg")) .scale(0.5f) //圖片大小(長寬)壓縮 從0按照 .outputQuality(0.5f) //圖片質量壓縮比例 從0-1,越接近1質量越好 .toOutputStream(new FileOutputStream("D:/showqrcode_50%.jpg")); } }
按大小和比例縮放
import java.io.File; import java.io.FileOutputStream; import net.coobird.thumbnailator.Thumbnails; public class Client21 { public static void main(String[] args) throws Exception { Thumbnails.of(new File("D:/showqrcode.jpg")) .size(500, 300) // 圖片比例不變 .toOutputStream(new FileOutputStream("D:/showqrcode_500_300.jpg")); } }
按大小縮放
import java.io.File;
import java.io.FileOutputStream;
import net.coobird.thumbnailator.Thumbnails;
public class Client22 {
public static void main(String[] args) throws Exception {
Thumbnails.of(new File("D:/showqrcode.jpg"))
.forceSize(500, 300) //不保持圖片比例
.toOutputStream(new FileOutputStream("D:/showqrcode_500_300.jpg"));
}
}
旋轉
import java.io.File;
import java.io.FileOutputStream;
import net.coobird.thumbnailator.Thumbnails;
public class Client3 {
public static void main(String[] args) throws Exception {
Thumbnails.of(new File("D:/showqrcode.jpg"))
.forceSize(500, 300)
.rotate(90f) //向右旋轉
.toOutputStream(new FileOutputStream("D:/showqrcode+90.jpg"));
}
}
加水印
水印圖片
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
public class Client4 {
public static void main(String[] args) throws IOException {
Thumbnails.of("D:/showqrcode.jpg")
.size(1280, 1024)
.watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("D:/watermark.jpg")),
0.5f) //位置,水印來源,透明度
.outputQuality(0.8f)
.toFile("D:/showqrcode_watermark_bottom_right.jpg");
}
}
裁剪
import java.io.IOException;
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
public class Client5 {
public static void main(String[] args) throws IOException {
Thumbnails.of("D:/showqrcode.jpg")
.sourceRegion(Positions.CENTER, 800, 600) //位置,寬,高
.size(800, 600)
.keepAspectRatio(false)
.toFile("D:/showqrcode_region_center.jpg");
}
}
更多用法請參考官方文件