<div id="cnblogs_post_body" class="blogpost-body"><p> Thumbnailator是一款不可多得的處理圖片的第三方工具包,它寫法簡單到讓人沒法相信,Java自己也有處理圖片壓縮的方法,可是代碼冗長到讓人痛不欲生,在篇末會給出Java自己的實現方式,作下對比,已體現Thumbnailator的強大。前段時間作分期的一種相對簡單的業務,須要傳遞用戶的身份信息,相關合同信息等相關圖片(作個業務傳這麼多圖片,我是用戶確定say goodbye了,不忍吐槽),其實圖片上傳後不須要顯示大圖,只須要縮略圖而已,在另外的審覈頁面才須要這樣的原圖。說了這個背景,那解約圖片太大傳輸太慢,嚴重影響體驗(這樣說顯得高大上,其實咱們部署了四個節點,並且對用戶資質要求嚴格,用戶量不會很大......),就拿時間解決下圖片壓縮的問題,就查到了這個Thumbnailator工具包,今天順便就把這個的主要用法寫下來,之後遇到直接拿來了,原圖就用女神-斯嘉麗約翰遜吧,哈哈哈。</p> <p> 好,上一張原圖</p> <p><img src="https://images2015.cnblogs.com/blog/398091/201606/398091-20160605174410680-1218395382.jpg" alt=""></p> <p> 其他壓縮或者處理過的圖片就放到demo目錄下,在文末會給出地址</p> <p> 這裏方便都直接轉換成文件了,其實能夠轉成流的用於傳輸(我是廢話了...)</p> <p>一. Thumbnailator對圖片的處理 </p> <p> 1.Thumbnailator對圖片進行指定尺寸的壓縮。</p> <p><img title="sijiali" src="E:\github\ssm-dubbo\myDailyNote\src\main\resources\images\sijili.jpg" alt="sijialiyuantu"></p> <div class="cnblogs_code"> <pre><span style="color: #008080;">1</span> String result = "src/main/resources/images/"<span style="color: #000000;">; </span><span style="color: #008080;">2 </span>Thumbnails.of(result + "sijili.jpg").size(200, 300).toFile(result + "image_200x300.jpg"<span style="color: #000000;">);</span></pre> </div> <p> 2.Thumbnailator對圖片進行指定比例的壓縮。</p> <div class="cnblogs_code"> <pre>String result = "src/main/resources/images/";<span style="color: #000000;"><br></span></pre> <pre>Thumbnails.of(result + "sijili.jpg").scale(0.5f).toFile(result + "image_0.5f.jpg");</pre> </div> <p> 3.Thumbnailator對圖片進行旋轉。</p> <div class="cnblogs_code"> <pre>String result = "src/main/resources/images/"<span style="color: #000000;">; Thumbnails.of(result </span>+ "sijili.jpg").scale(1.0f).rotate(180).toFile(result + "image_r180.jpg");</pre> </div> <p> 4.Thumbnailator對圖片進行格式轉換。</p> <div class="cnblogs_code"> <pre>String result = "src/main/resources/images/"<span style="color: #000000;">; Thumbnails.of(result </span>+ "sijili.jpg").scale(1.0f).outputFormat("png").toFile(result + "image_sijiali.png");</pre> </div> <p> 5.Thumbnailator對圖片進行剪裁。</p> <div class="cnblogs_code"> <pre>String result = "src/main/resources/images/"<span style="color: #000000;">; Thumbnails.of(result </span>+ "sijili.jpg").scale(1.0f).sourceRegion(Positions.CENTER, 400<span style="color: #000000;">, </span>400).toFile(result + "image_center.png"<span style="color: #000000;">); Thumbnails.of(result </span>+ "sijili.jpg").sourceRegion(100, 100, 100, 100).scale(1.0f<span style="color: #000000;">).toFile(result </span>+ "image_100_4.jpg");</pre> </div> <p> 6.Thumbnailator對圖片進行加水印操做。</p> <div class="cnblogs_code"> <pre>String result = "src/main/resources/images/"<span style="color: #000000;">; </span><span style="color: #008000;">//</span><span style="color: #008000;"> watermark 參數 1.位置 2.水印圖片 3.透明度</span></br> Thumbnails.of(result + "sijili.jpg").scale(1.0f).watermark(Positions.CENTER, ImageIO.read(<span style="color: #0000ff;">new</span> File(result + "warter.jpg")), 0.25f).toFile(result + "image_warter.jpg");</pre> </div> <p> 7.Thumbnailator對圖片進行加文字水印操做。</p> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div> <pre>String result = "src/main/resources/images/"<span style="color: #000000;">;</br> BufferedImage bi </span>= <span style="color: #0000ff;">new</span> BufferedImage(100, 100<span style="color: #000000;">, BufferedImage.TYPE_INT_RGB);</br> Graphics2D g </span>=<span style="color: #000000;"> bi.createGraphics();</br> g.setColor(Color.LIGHT_GRAY);</br> g.drawRect(</span>0, 0, 10, 10<span style="color: #000000;">);</br> </span><span style="color: #0000ff;">char</span>[] data = "liudTest"<span style="color: #000000;">.toCharArray();</br> g.drawChars(data, </span>0, data.length, 5, 32<span style="color: #000000;">);</br></br>javascript
</span><span style="color: #008000;">//</span><span style="color: #008000;"> watermark 參數 1.位置 2.水印 3.透明度</span></br> Thumbnails.of(result + "sijili.jpg").scale(1.0f).watermark(Positions.CENTER, bi, 1.0f).toFile(result + "image_warter_liud.jpg");</pre>java
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div></div> <p> Thumbnailator對圖片進行加文字水印的方式,並不推薦,能夠先對文字處理成圖片以後在加水印,看上面代碼的冗長也不符合Thumbnailator的風格不是。</p> <p> 二 . Java原生對圖片的處理</p> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div> <pre>String result = "src/main/resources/images/"<span style="color: #000000;">;</br> OutputStream os </span>= <span style="color: #0000ff;">new</span> FileOutputStream(result + "sijili_out.jpg"<span style="color: #000000;">);</br>git
Image image </span>= ImageIO.read(<span style="color: #0000ff;">new</span> File(result + "sijili.jpg"<span style="color: #000000;">));</br></br>github
BufferedImage bufferedImage </span>= <span style="color: #0000ff;">new</span> BufferedImage(100, 100<span style="color: #000000;">, BufferedImage.TYPE_INT_RGB);</br> bufferedImage.getGraphics().drawImage(image.getScaledInstance(</span>100, 100, image.SCALE_SMOOTH), 0, 0, <span style="color: #0000ff;">null</span><span style="color: #000000;">);</br></br>工具
ImageIO.write(bufferedImage, </span>"jpg"<span style="color: #000000;">,os);</br> os.close();</span></pre>post
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div></div> <p> 關於圖片處理就先總結到這,代碼的地址就放到個人github下了,地址是<a title="github地址" href="https://github.com/liujava/myDailyNote" target="_blank">https://github.com/liujava/myDailyNote</a>,歡迎下載,並提出意見。</p></div>this