Java 使用 thumbnailator 处理图片

thumbnailator 介绍

Thumbnailator 是一个优秀的图片处理的Google开源Java类库。处理效果远比Java API的好。从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生成处理后的图片,且允许微调图片的生成方式,同时保持了需要写入的最低限度的代码量。还支持对一个目录的所有图片进行批量处理操作。
支持的处理操作:图片缩放,区域裁剪,水印,旋转,保持比例。

地址:
Thumbnailator官网:http://code.google.com/p/thumbnailator/

GitHub地址:https://github.com/coobird/thumbnailator

使用方式

maven 引入依赖

<dependency>
    <groupId>net.coobird</groupId>
    <artifactId>thumbnailator</artifactId>
    <version>0.4.18</version>
</dependency>

按质量或比例压缩

import java.io.File;
import java.io.FileOutputStream;
import net.coobird.thumbnailator.Thumbnails;

public class Test1 {

  public static void main(String[] args) throws Exception {
    Thumbnails.of(new File("D:/img.jpg"))
        .scale(1f) //图片大小(长宽)压缩比例 从0-1,1表示原图
        .outputQuality(0.5f) //图片质量压缩比例 从0-1,越接近1质量越好
        .toOutputStream(new FileOutputStream("D:/img50.jpg"));
  }

}

按大小和比例缩放

import java.io.File;
import java.io.FileOutputStream;
import net.coobird.thumbnailator.Thumbnails;

public class Test21 {

  public static void main(String[] args) throws Exception {
    Thumbnails.of(new File("D:/img.jpg"))
        .size(500, 300) // 图片比例不变
        .toOutputStream(new FileOutputStream("D:/img_500_300.jpg"));
  }

}

按大小和比例缩放

import java.io.File;
import java.io.FileOutputStream;
import net.coobird.thumbnailator.Thumbnails;

public class Test22 {

  public static void main(String[] args) throws Exception {
    Thumbnails.of(new File("D:/showqrcode.jpg"))
        .forceSize(500, 300) //不保持图片比例
        .toOutputStream(new FileOutputStream("D:/showqrcode_500_300.jpg"));
  }

}

旋转

import java.io.File;
import java.io.FileOutputStream;
import net.coobird.thumbnailator.Thumbnails;

public class Test3 {

  public static void main(String[] args) throws Exception {
    Thumbnails.of(new File("D:/img.jpg"))
        .rotate(90f) //向右旋转
        .toOutputStream(new FileOutputStream("D:/img.jpg"));
  }

}

加水印

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 Test4 {

  public static void main(String[] args) throws IOException {
    Thumbnails.of("D:/img.jpg")
        .size(1280, 1024)
        .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("D:/watermark.jpg")),
            0.5f) //位置,水印来源,透明度
        .outputQuality(0.8f)
        .toFile("D:/img.jpg");
  }

}

裁剪

    private void test6() throws IOException {
        /**
         * 图片中心400*400的区域
         */
        Thumbnails.of("images/test.jpg").sourceRegion(Positions.CENTER, 400, 400).size(200, 200).keepAspectRatio(false)
                .toFile("C:/image_region_center.jpg");
        /**
         * 图片右下400*400的区域
         */
        Thumbnails.of("images/test.jpg").sourceRegion(Positions.BOTTOM_RIGHT, 400, 400).size(200, 200).keepAspectRatio(false)
                .toFile("C:/image_region_bootom_right.jpg");
        /**
         * 指定坐标
         */
        Thumbnails.of("images/test.jpg").sourceRegion(600, 500, 400, 400).size(200, 200).keepAspectRatio(false).toFile("C:/image_region_coord.jpg");
    }

转化图像格式

   private void test7() throws IOException {
        /**
         * outputFormat(图像格式)
         */
        Thumbnails.of("images/test.jpg").size(1280, 1024).outputFormat("png").toFile("C:/image_1280x1024.png");
        Thumbnails.of("images/test.jpg").size(1280, 1024).outputFormat("gif").toFile("C:/image_1280x1024.gif");
    }

输出到OutputStream

 private void test8() throws IOException {
        /**
         * toOutputStream(流对象)
         */
        OutputStream os = new FileOutputStream("C:/image_1280x1024_OutputStream.png");
        Thumbnails.of("images/test.jpg").size(1280, 1024).toOutputStream(os);
    }

输出到BufferedImage

 private void test9() throws IOException {
        /**
         * asBufferedImage() 返回BufferedImage
         */
        BufferedImage thumbnail = Thumbnails.of("images/test.jpg").size(1280, 1024).asBufferedImage();
        ImageIO.write(thumbnail, "jpg", new File("C:/image_1280x1024_BufferedImage.jpg"));
    }

ps: 这个工具无法正确压缩出png格式的图片。
因为png本身就是一种无损的图片格式,而jpg是一种压缩的图片格式;
当前方法目的是为了在尽可能不丢失图片质量的情况下进行的压缩;
建议将图片压缩后的格式设置成jpg来解决;.outputFormat("jpg")
工具源码本身最后还是调用jdk中的ImageIO.createImageOutputStream(fos);来实现的;

参考博客 https://www.cnblogs.com/linkstar/p/7412012.html

相关文章

转载请注明: 转载自 浮生一程
本文链接地址 Java 使用 thumbnailator 处理图片
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇