• java使用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,欢迎下载,并提出意见。

  • 相关阅读:
    【POJ3237】Tree 树链剖分+线段树
    【BZOJ3531】[Sdoi2014]旅行 树链剖分+动态开点线段树
    【BZOJ4034】[HAOI2015]树上操作 树链剖分+线段树
    【BZOJ1984】月下“毛景树” 树链剖分+线段树
    【BZOJ2243】[SDOI2011]染色 树链剖分+线段树
    【BZOJ1036】[ZJOI2008]树的统计Count 树链剖分
    树形DP水题杂记
    【BZOJ1827】[Usaco2010 Mar]gather 奶牛大集会 树形DP
    【BZOJ1864】[Zjoi2006]三色二叉树 树形DP
    【BZOJ1060】[ZJOI2007]时态同步 树形DP
  • 原文地址:https://www.cnblogs.com/jpfss/p/9167240.html
Copyright © 2020-2023  润新知