<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