Thumbnailator库(高质量缩略图)简单总结

1. Thumbnailator是一个用java生成高质量缩略图的第三方库,可以用来
1.生成缩率图;
2.添加水印;
3.图片旋转;
4.图片大小缩放;
5.图片压缩;
2.Thumbnailator的github地址
3. 帮助文档
4.thumbnailator库只有一个jar,不依赖第三方库,maven依赖
<dependency>
  <groupId>net.coobird</groupId>
  <artifactId>thumbnailator</artifactId>
  <version>0.4.8</version>
</dependency>
5.简单使用
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
import net.coobird.thumbnailator.name.Rename;
import net.coobird.thumbnailator.resizers.configurations.ScalingMode;
import org.apache.pdfbox.tools.imageio.ImageIOUtil;

import javax.imageio.ImageIO;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

/**
 * @author lcj
 * @version 1.0
 * @description 生成缩略图和水印非常好用,具体帮助文档 https://github.com/coobird/thumbnailator/wiki/Maven
 *              缩略图
 *              水印
 *              选择
 *              格式转换
 * @Create 2017-08-03
 */
public class ThumbnailatorDmo {
    public static void main(String[] args) {
        //使用给定的图片生成指定大小的图片
        //generateFixedSizeImage();

        //对原图加水印,然后顺时针旋转90度,最后压缩为80%保存
        //generateRotationWatermark();

        //转换图片格式,将流写入到输出流
        //generateOutputstream();

        //按比例缩放图片
        //generateScale();

        //生成缩略图到指定的目录
        //generateThumbnail2Directory();

        //将指定目录下所有图片生成缩略图
        //generateDirectoryThumbnail();
    }

    /**
     * 使用给定的图片生成指定大小的图片
     */
    private static void generateFixedSizeImage(){
        try {
            Thumbnails.of("data/meinv.jpg").size(80,80).toFile("data/newmeinv.jpg");
        } catch (IOException e) {
            System.out.println("原因: " + e.getMessage());
        }
    }

    /**
     * 对原图加水印,然后顺时针旋转90度,最后压缩为80%保存
     */
    private static void generateRotationWatermark(){
        try {
            Thumbnails.of("data/2016010208.jpg").
                    size(160,160). // 缩放大小
                    rotate(90). // 顺时针旋转90度
                    watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("data/newmeinv.jpg")),0.5f). //水印位于右下角,半透明
                    outputQuality(0.8). // 图片压缩80%质量
                    toFile("data/2016010208_new.jpg");
        } catch (IOException e) {
            System.out.println("原因: " + e.getMessage());
        }
    }

    /**
     * 转换图片格式,将流写入到输出流
     */
    private static void generateOutputstream(){
        try(OutputStream outputStream = new FileOutputStream("data/2016010208_outputstream.png")) { //自动关闭流
            Thumbnails.of("data/2016010208.jpg").
                    size(500,500).
                    outputFormat("png"). // 转换格式
                    toOutputStream(outputStream); // 写入输出流
        } catch (IOException e) {
            System.out.println("原因: " + e.getMessage());
        }
    }

    /**
     * 按比例缩放图片
     */
    private static void generateScale(){
        try {
            Thumbnails.of("data/2016010208.jpg").
                    //scalingMode(ScalingMode.BICUBIC).
                    scale(0.8). // 图片缩放80%, 不能和size()一起使用
                    outputQuality(0.8). // 图片质量压缩80%
                    toFile("data/2016010208_scale.jpg");
        } catch (IOException e) {
            System.out.println("原因: " + e.getMessage());
        }
    }

    /**
     * 生成缩略图到指定的目录
     */
    private static void generateThumbnail2Directory(){
        try {
            Thumbnails.of("data/2016010208.jpg","data/meinv.jpg").
                    //scalingMode(ScalingMode.BICUBIC).
                            scale(0.8). // 图片缩放80%, 不能和size()一起使用
                   toFiles(new File("data/new/"), Rename.NO_CHANGE);//指定的目录一定要存在,否则报错
        } catch (IOException e) {
            System.out.println("原因: " + e.getMessage());
        }
    }

    /**
     * 将指定目录下所有图片生成缩略图
     */
    private static void generateDirectoryThumbnail(){
        try {
            Thumbnails.of(new File("data/new").listFiles()).
                    //scalingMode(ScalingMode.BICUBIC).
                            scale(0.8). // 图片缩放80%, 不能和size()一起使用
                    toFiles(new File("data/new/"), Rename.SUFFIX_HYPHEN_THUMBNAIL);//指定的目录一定要存在,否则报错
        } catch (IOException e) {
            System.out.println("原因: " + e.getMessage());
        }
    }
}
6.Thumbnialator的api文档
7.总结:Thumbnialator是一个链式风格写法的接口,非常简单易用上手,功能强大.
如果你需要高性能生成缩略图Java例子,可以尝试使用Java图像处理`imgscalr`。`imgscalr`是一个基于Java的高性能图像缩放,它可以在生成缩略图时提供较好的性能和质量。 要使用`imgscalr`,你需要添加以下依赖到你的项目中: ```xml <dependency> <groupId>org.imgscalr</groupId> <artifactId>imgscalr-lib</artifactId> <version>4.2</version> </dependency> ``` 下面是一个使用`imgscalr`生成缩略图的例子: ```java import org.imgscalr.Scalr; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class ThumbnailGenerator { public static void generateThumbnail(String imagePath, String outputDirectory, int thumbnailWidth, int thumbnailHeight) throws IOException { BufferedImage originalImage = ImageIO.read(new File(imagePath)); BufferedImage thumbnail = Scalr.resize(originalImage, thumbnailWidth, thumbnailHeight); String outputFilePath = outputDirectory + File.separator + getFileName(imagePath); ImageIO.write(thumbnail, "jpg", new File(outputFilePath)); } private static String getFileName(String filePath) { File file = new File(filePath); return file.getName(); } } ``` 在这个例子中,我们使用`ImageIO.read`读取原始图片,并使用`Scalr.resize`方法来生成指定宽度和高度的缩略图。然后,我们将缩略图保存到指定的输出目录。 你可以根据需要调整缩略图的宽度和高度,并使用`Scalr.Method`来指定缩放的算法(例如,`Scalr.Method.ULTRA_QUALITY`提供了更高的质量但速度较慢)。 使用`imgscalr`,你可以获得更好的性能和质量,同时也能避免内存溢出问题。记得在项目中添加相应的依赖,并根据需要调整生成缩略图的逻辑。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值