Thumbnailator是一款不可多得的處理圖片的第三方工具包,它寫法簡單到讓人沒法相信,Java自己也有處理圖片壓縮的方法,可是代碼冗長到讓人痛不欲生,在篇末會給出Java自己的實現方式,作下對比,已體現Thumbnailator的強大。前段時間作分期的一種相對簡單的業務,須要傳遞用戶的身份信息,相關合同信息等相關圖片(作個業務傳這麼多圖片,我是用戶確定say goodbye了,不忍吐槽),其實圖片上傳後不須要顯示大圖,只須要縮略圖而已,在另外的審覈頁面才須要這樣的原圖。說了這個背景,那解約圖片太大傳輸太慢,嚴重影響體驗(這樣說顯得高大上,其實咱們部署了四個節點,並且對用戶資質要求嚴格,用戶量不會很大......),就拿時間解決下圖片壓縮的問題,就查到了這個Thumbnailator工具包,今天順便就把這個的主要用法寫下來,之後遇到直接拿來了,原圖就用女神-斯嘉麗約翰遜吧,哈哈哈。java
好,上一張原圖git
其他壓縮或者處理過的圖片就放到demo目錄下,在文末會給出地址github
這裏方便都直接轉換成文件了,其實能夠轉成流的用於傳輸(我是廢話了...)工具
一. Thumbnailator對圖片的處理 spa
1.Thumbnailator對圖片進行指定尺寸的壓縮。code
1 String result = "src/main/resources/images/"; 2 Thumbnails.of(result + "sijili.jpg").size(200, 300).toFile(result + "image_200x300.jpg");
2.Thumbnailator對圖片進行指定比例的壓縮。orm
String result = "src/main/resources/images/";
Thumbnails.of(result + "sijili.jpg").scale(0.5f).toFile(result + "image_0.5f.jpg");
3.Thumbnailator對圖片進行旋轉。blog
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,歡迎下載,並提出意見。