1. 程式人生 > 實用技巧 >java實現圖片壓縮

java實現圖片壓縮

簡介

我們在專案中經常會遇到圖片上傳的需求,如商品圖片,但圖片太大的話,在客戶端載入太慢影響使用者體驗,所有一般會將圖片進行壓縮。

實現

原圖

新增依賴

<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");
  }

}

更多用法請參考官方文件

參考

java使用google開源工具實現圖片壓縮