java图片处理类库

什么是Thumbnailator?

java图片处理类库

文章插图
Thumbnailator是Google开源的优秀图片处理的第三方Java类库,比JDK自带的库要好用的多 。
官网Github地址
Maven依赖
目前最新版本是0.4.19
【java图片处理类库】<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.19</version></dependency>图片处理步骤
Thumbnailtor处理图片的步骤可以看我绘制的下图来说明 。
java图片处理类库

文章插图
主要分为三个步骤 。
构建Thumbnails.Builder
要使用thumbnailtor,主要使用Thumbnails类,该类采用建造者模式设计,类中提供了很多返回Builder的静态方法 。
java图片处理类库

文章插图
正如上图所示,Thumbnails提供了通过字符串图片地址、File对象、URI对象等方式创建Thumbnails对象的方式 。
of方法
of方法提供了多种参数,当然参数虽然不同,功能却是相同的 。并且of支持多个参数,可以同时处理多个图片,不过要特别注意,处理多个图片的时候,输出方法也要使用支持输出多个图片的方法 。
package cn.programtalk;import net.coobird.thumbnailator.Thumbnails;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.net.URL;public class ThumbnailsOfDemo { public static void main(String[] args) throws IOException { // 参数是本地文件路径,支持多参数 Thumbnails.of("input/logo.png") .scale(1D) .toFile("output/o1.png"); // File类型的参数,支持多参数 Thumbnails.of(new File("input/logo.png")) .scale(1D) .toFile("output/o2.png"); // BufferedImage类型参数 BufferedImage bufferedImage = ImageIO.read(new File("input/logo.png")); Thumbnails.of(bufferedImage) .scale(1D) .toFile("output/o3.png"); // FileInputStream类型 File file = new File("input/logo.png"); FileInputStream fis = new FileInputStream(file); Thumbnails.of(fis) .scale(1D) .toFile("output/o4.png"); // 网络图片 Thumbnails.of(new URL("***/202302061502561.png")) .scale(1D) .toFile("output/o4.png"); }}scale代表缩放,toFile是输出图片的方法,先不要管,后面会讲到 。代码执行完毕后,会生成五个图片 。
fromFilenames方法
Thumbnails.fromFilenames(Iterable<String> files)方法支持接入多个图片,也就是说能处理多个图片 。
package cn.programtalk;import net.coobird.thumbnailator.Thumbnails;import net.coobird.thumbnailator.name.Rename;import java.io.File;import java.io.IOException;import java.util.Arrays;import java.util.List;public class ThumbnailsFromFilenamesDemo { /** * 使用FromFiles处理多个图片 。*/ public static void main(String[] args) throws IOException { // 参数是本地文件路径,支持多参数 File file = new File("input"); // input文件夹下有多个图片 File[] files = file.listFiles(); assert files != null; List<String> filenames = Arrays.stream(files).map(File::getPath).toList(); Thumbnails.fromFilenames(filenames) .scale(1D) // 这里必须使用`toFiles`,因为处理的是多图 .toFiles(new File("output"), Rename.SUFFIX_HYPHEN_THUMBNAIL); }}toFiles的用法后面会讲解 。
fromFiles方法
Thumbnails.fromFiles方法(Iterable<File> files)方法支持接入多个图片,也就是说能处理多个图片 。不同于fromFilenames的是它的参数是Iterable<File>类型 。
package cn.programtalk;import net.coobird.thumbnailator.Thumbnails;import net.coobird.thumbnailator.name.Rename;import java.io.File;import java.io.IOException;import java.util.Arrays;public class ThumbnailsFromFilesDemo { /** * 使用fromFiles处理多个图片 。*/ public static void main(String[] args) throws IOException { File file = new File("input"); File[] files = file.listFiles(); assert files != null; Thumbnails.fromFiles(Arrays.asList(files)) .scale(1D) // 这里必须使用`toFiles`,因为处理的是多图 .toFiles(new File("output"), Rename.SUFFIX_HYPHEN_THUMBNAIL); }}

推荐阅读