天天看點

工作手記(一) 圖檔壓縮

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
import net.coobird.thumbnailator.name.Rename;
import net.coobird.thumbnailator.resizers.configurations.ScalingMode;
//import org.apache.pdfbox.tools.imageio.ImageIOUtil;

import javax.imageio.ImageIO;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

/**
 * @author lcj
 * @version 1.0
 * @description 生成縮略圖和水印非常好用,具體幫助文檔 https://github.com/coobird/thumbnailator/wiki/Maven
 *              縮略圖
 *              水印
 *              選擇
 *              格式轉換
 * @Create 2017-08-03
 */
public class ThumbnailatorDmo {
    public static void main(String[] args) {
        //使用給定的圖檔生成指定大小的圖檔
        //generateFixedSizeImage();

        //對原圖加水印,然後順時針旋轉90度,最後壓縮為80%儲存
        //generateRotationWatermark();

        //轉換圖檔格式,将流寫入到輸出流
        //generateOutputstream();

        //按比例縮放圖檔
//        generateScale();

        //生成縮略圖到指定的目錄
        //generateThumbnail2Directory();

        //将指定目錄下所有圖檔生成縮略圖
        //generateDirectoryThumbnail();
        
        unchangedSizeToCompress();
    }

    /**
     * 使用給定的圖檔生成指定大小的圖檔
     */
    private static void generateFixedSizeImage(){
        try {
            Thumbnails.of("data/meinv.jpg").size(80,80).toFile("data/newmeinv.jpg");
        } catch (IOException e) {
            System.out.println("原因: " + e.getMessage());
        }
    }

    /**
     * 對原圖加水印,然後順時針旋轉90度,最後壓縮為80%儲存
     */
    private static void generateRotationWatermark(){
        try {
            Thumbnails.of("data/2016010208.jpg").
                    size(160,160). // 縮放大小
                    rotate(90). // 順時針旋轉90度
                    watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("data/newmeinv.jpg")),0.5f). //水印位于右下角,半透明
                    outputQuality(0.8). // 圖檔壓縮80%品質
                    toFile("data/2016010208_new.jpg");
        } catch (IOException e) {
            System.out.println("原因: " + e.getMessage());
        }
    }

    /**
     * 轉換圖檔格式,将流寫入到輸出流
     */
    private static void generateOutputstream(){
        try(OutputStream outputStream = new FileOutputStream("data/2016010208_outputstream.png")) { //自動關閉流
            Thumbnails.of("2018032714.18V").
                    size(500,500).
                    outputFormat("png"). // 轉換格式
                    toOutputStream(outputStream); // 寫入輸出流
        } catch (IOException e) {
            System.out.println("原因: " + e.getMessage());
        }
    }

    /**
     * 按比例縮放圖檔
     */
    private static void generateScale(){
        try {
            Thumbnails.of("data/2018032714.18V").
                    //scalingMode(ScalingMode.BICUBIC).
                    scale(0.8). // 圖檔縮放80%, 不能和size()一起使用
                    outputQuality(0.8). // 圖檔品質壓縮80%
                    toFile("data/2016010208_scale.jpg");
        } catch (IOException e) {
            System.out.println("原因: " + e.getMessage());
        }
    }

    /**
     * 生成尺寸不變 壓縮檔案大小
     */
    private static void unchangedSizeToCompress(){
    	try{
    		 Thumbnails.of("data/2018032714.18V").
             scale(1f).
             outputQuality(0.15f).
             toFile("data/fuben015.jpg");// 圖檔尺寸不變,壓縮圖檔檔案大小outputQuality實作,參數1為最高質
    	} catch (IOException e){
    		 System.out.println("原因: " + e.getMessage());
    	}
    }
    
    /**
     * 生成縮略圖到指定的目錄
     */
    private static void generateThumbnail2Directory(){
        try {
            Thumbnails.of("data/2016010208.jpg","data/meinv.jpg").
                    //scalingMode(ScalingMode.BICUBIC).
                            scale(0.8). // 圖檔縮放80%, 不能和size()一起使用
                   toFiles(new File("data/new/"), Rename.NO_CHANGE);//指定的目錄一定要存在,否則報錯
        } catch (IOException e) {
            System.out.println("原因: " + e.getMessage());
        }
    }

    /**
     * 将指定目錄下所有圖檔生成縮略圖
     */
    private static void generateDirectoryThumbnail(){
        try {
            Thumbnails.of(new File("data/new").listFiles()).
                    //scalingMode(ScalingMode.BICUBIC).
                            scale(0.8). // 圖檔縮放80%, 不能和size()一起使用
                    toFiles(new File("data/new/"), Rename.SUFFIX_HYPHEN_THUMBNAIL);//指定的目錄一定要存在,否則報錯
        } catch (IOException e) {
            System.out.println("原因: " + e.getMessage());
        }
    }
}
           

注 demo以及jar包下載下傳位址 點選打開連結