美文网首页Android开发探索我爱编程
java - Thumbnailator实现图片的压缩和裁切--

java - Thumbnailator实现图片的压缩和裁切--

作者: 啃过雪糕的兔子_hxy | 来源:发表于2018-04-16 23:39 被阅读71次

    前言

    作为java程序员的你是否对业务中操作图片苦恼过?!

    现在开发中,有很多应用都有上传图片这个功能,对于移动端调用手机摄像头拍照再上传图片到服务器这种操作很多。

    现在的手机拍摄的图片都是高清图片,分辨率也是相当的高,当然占用内存也是不小的。

    比如作者随手拍的一张:

    手机随拍的一张

    可以看下占用多少内存:

    图片详细信息

    可以看到图片分辨率3456*4608和占用4.39MB内存大小。问题也就来了,如果每用户都上传2-5M的图片怎么办?显然我想说的不是占用的服务器内存空间的问题,只要你有足够的钱,升级空间解决呀!但是网速太重要了,你的用户如果天天加载你的网页加载半天,就是因为你的图片太大导致的就不是钱能够解决的事了。因为网络环境是你不可控的,所以你只能考虑压缩图片的质量从而保证网站打开的速度。

    压缩的要求

    1、压缩程度可控制,想压缩成多小就多小。

    2、压缩之后图片尽可能的不失真。

    3、压缩速度要快。

    4、代码简单,依赖较少。

    5、工具形式,开箱即用。

    废话少说,上工具。

    Google的开源工具类------Thumbnailator    帮助文档

    为什么选择Thumbnailator?

    作者认为任何的技术都是解决实际业务中遇到的问题!

    Thumbnailator能解决:

    1.生成缩率图;

    2.添加水印;

    3.图片旋转;

    4.图片大小缩放;

    5.图片压缩;

    如何使用

    Thumbnailator 只需要引入一个jar,不依赖于其他任何第三方库,而且API是链式编程风格。最新版本maven依赖:

    <dependency>

        <groupId>net.coobird</groupId>

        <artifactId>thumbnailator</artifactId>

        <version>0.4.8</version>

    </dependency>

    package cn.hxy;

    import java.io.File;

    import java.io.IOException;

    import javax.imageio.ImageIO;

    import net.coobird.thumbnailator.Thumbnails;

    import net.coobird.thumbnailator.geometry.Positions;

    public class ThumbnailatorTest {

    public static void main(String[] args) throws IOException {

    ThumbnailatorTest thumbnailatorTest = new ThumbnailatorTest();

    //thumbnailatorTest.test1();

    //thumbnailatorTest.test2();

    //thumbnailatorTest.test3();

    //thumbnailatorTest.test4();

    thumbnailatorTest.test5();

    }

    /** * 指定大小进行缩放 * @throws IOException */

    public void test1() throws IOException{

    /*    * size(width,height) 若图片横比200小,高比300小,不变    * 若图片横比200小,高比300大,高缩小到300,图片比例不变 若图片横比200大,高比300小,横缩小到200,图片比例不变    * 若图片横比200大,高比300大,图片按比例缩小,横为200或高为300    */ Thumbnails.of("D:\\img\\test.jpg").size(200, 300).toFile("D:\\img\\end\\test_200_300.jpg");

    }

    /** * 按照比例缩放 * @throws IOException */

    public void test2() throws IOException{

    /*    * size(width,height) 若图片横比200小,高比300小,不变    * 若图片横比200小,高比300大,高缩小到300,图片比例不变 若图片横比200大,高比300小,横缩小到200,图片比例不变    * 若图片横比200大,高比300大,图片按比例缩小,横为200或高为300    */ Thumbnails.of("D:\\img\\test.jpg").scale(0.5f).toFile("D:\\img\\end\\test_0.5f.jpg");

    }

    /** * 不按照比例,指定大小进行缩放 *  * @throws IOException */

    private void test3() throws IOException {

      /**    * keepAspectRatio(false) 默认是按照比例缩放的    */

      Thumbnails.of("D:\\img\\test.jpg").size(120, 120).keepAspectRatio(true).toFile("D:\\img\\end\\image_120x120_2.jpg");

    }

    /** * 旋转 *  * @throws IOException */

    private void test4() throws IOException {

      /**    * rotate(角度),正数:顺时针 负数:逆时针    */

      Thumbnails.of("D:\\img\\test.jpg").size(1280, 1024).rotate(90).toFile("D:\\img\\end\\image+90.jpg");

    }

    /** * 水印 *  * @throws IOException */

    private void test5() throws IOException {

        /**    * watermark(位置,水印图,透明度)    */

      Thumbnails.of("D:\\img\\test.jpg").size(1280, 1024).watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("D:\\img\\water.jpg")), 0.5f).outputQuality(0.8f).toFile("D:\\img\\end\\image_watermark_bottom_right.jpg");

    }

    }

    相关文章

      网友评论

        本文标题:java - Thumbnailator实现图片的压缩和裁切--

        本文链接:https://www.haomeiwen.com/subject/vwjykftx.html