Thumbnailator壓縮圖片


  Thumbnailator是一款不可多得的處理圖片的第三方工具包,它寫法簡單到讓人無法相信,Java本身也有處理圖片壓縮的方法,但是代碼冗長到讓人痛不欲生,在篇末會給出Java本身的實現方式,做下對比,已體現Thumbnailator的強大。前段時間做分期的一種相對簡單的業務,需要傳遞用戶的身份信息,相關合同信息等相關圖片(做個業務傳這么多圖片,我是用戶肯定say goodbye了,不忍吐槽),其實圖片上傳后不需要顯示大圖,只需要縮略圖而已,在另外的審核頁面才需要這樣的原圖。說了這個背景,那解約圖片太大傳輸太慢,嚴重影響體驗(這樣說顯得高大上,其實我們部署了四個節點,而且對用戶資質要求嚴格,用戶量不會很大......),就拿時間解決下圖片壓縮的問題,就查到了這個Thumbnailator工具包,今天順便就把這個的主要用法寫下來,以后遇到直接拿來了,原圖就用女神-斯嘉麗約翰遜吧,哈哈哈。

  好,上一張原圖

  其余壓縮或者處理過的圖片就放到demo目錄下,在文末會給出地址

  這里方便都直接轉換成文件了,其實可以轉成流的用於傳輸(我是廢話了...)

一.  Thumbnailator對圖片的處理 

  1.Thumbnailator對圖片進行指定尺寸的壓縮。

sijialiyuantu

1 String result = "src/main/resources/images/";
2 Thumbnails.of(result + "sijili.jpg").size(200, 300).toFile(result + "image_200x300.jpg");

   2.Thumbnailator對圖片進行指定比例的壓縮。

String result = "src/main/resources/images/";
Thumbnails.of(result + "sijili.jpg").scale(0.5f).toFile(result + "image_0.5f.jpg");

  3.Thumbnailator對圖片進行旋轉。

String result = "src/main/resources/images/";
Thumbnails.of(result + "sijili.jpg").scale(1.0f).rotate(180).toFile(result + "image_r180.jpg");

      4.Thumbnailator對圖片進行格式轉換。

String result = "src/main/resources/images/";
Thumbnails.of(result + "sijili.jpg").scale(1.0f).outputFormat("png").toFile(result + "image_sijiali.png");

      5.Thumbnailator對圖片進行剪裁。

String result = "src/main/resources/images/";
Thumbnails.of(result + "sijili.jpg").scale(1.0f).sourceRegion(Positions.CENTER, 400, 400).toFile(result + "image_center.png");
Thumbnails.of(result + "sijili.jpg").sourceRegion(100, 100, 100, 100).scale(1.0f).toFile(result + "image_100_4.jpg");

     6.Thumbnailator對圖片進行加水印操作。

String result = "src/main/resources/images/";
 // watermark 參數 1.位置 2.水印圖片 3.透明度
Thumbnails.of(result + "sijili.jpg").scale(1.0f).watermark(Positions.CENTER, ImageIO.read(new File(result + "warter.jpg")), 0.25f).toFile(result + "image_warter.jpg");

  7.Thumbnailator對圖片進行加文字水印操作。

String result = "src/main/resources/images/";
BufferedImage bi = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.setColor(Color.LIGHT_GRAY);
g.drawRect(0, 0, 10, 10);
char[] data = "liudTest".toCharArray();
g.drawChars(data, 0, data.length, 5, 32);

// watermark 參數 1.位置 2.水印 3.透明度
Thumbnails.of(result + "sijili.jpg").scale(1.0f).watermark(Positions.CENTER, bi, 1.0f).toFile(result + "image_warter_liud.jpg");

      Thumbnailator對圖片進行加文字水印的方式,並不推薦,可以先對文字處理成圖片之后在加水印,看上面代碼的冗長也不符合Thumbnailator的風格不是。

 二 . Java原生對圖片的處理

String result = "src/main/resources/images/";
OutputStream os = new FileOutputStream(result + "sijili_out.jpg");

Image image = ImageIO.read(new File(result + "sijili.jpg"));

BufferedImage bufferedImage = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
        bufferedImage.getGraphics().drawImage(image.getScaledInstance(100, 100, image.SCALE_SMOOTH), 0, 0, null);

ImageIO.write(bufferedImage, "jpg",os);
os.close();

      關於圖片處理就先總結到這,代碼的地址就放到我的github下了,地址是https://github.com/liujava/myDailyNote,歡迎下載,並提出意見。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM