开源库 Thumbnailator 可根据已有图片,截取指定范围并缩放,还支持添加水印

Maven 依赖

Maven: https://mvnrepository.com/artifact/net.coobird/thumbnailator

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

首先是针对单个图片文件进行缩略

  File file = new File(filePath);/*** 指定大小进行缩放* 若图片横比200小,高比300小,不变* 若图片横比200小,高比300大,高缩小到300,图片比例不变* 若图片横比200大,高比300小,横缩小到200,图片比例不变* 若图片横比200大,高比300大,图片按比例缩小,横为200或高为300*/Thumbnails.of(filePath).size(200, 300).toFile(file.getAbsolutePath() + "_200x300.jpg");/*** 按照比例进行缩放* scale(比例)* */Thumbnails.of(filePath).scale(0.25f).toFile(file.getAbsolutePath() + "_25%.jpg");/***  不按照比例,指定大小进行缩放*  keepAspectRatio(false) 默认是按照比例缩放的* */Thumbnails.of(filePath).size(200, 200).keepAspectRatio(false).toFile(file.getAbsolutePath() + "_200x200.jpg");/***  输出图片到流对象** */OutputStream os = new FileOutputStream(file.getAbsolutePath() + "_OutputStream.png");Thumbnails.of(filePath).size(1280, 1024).toOutputStream(os);/***  输出图片到BufferedImage* **/BufferedImage thumbnail = Thumbnails.of(filePath).size(1280, 1024).asBufferedImage();ImageIO.write(thumbnail, "jpg", new File(file.getAbsolutePath()+"_BufferedImage.jpg"));

以下是针对一个文件夹下面的所有的图片进行文件的缩略

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.name.Rename;import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;/*** 图片压缩工具类** @author lnj* createTime 2018-10-19 15:31**/
public class ImageUtil {// 图片默认缩放比率private static final double DEFAULT_SCALE = 0.8d;// 缩略图后缀private static final String SUFFIX = "-thumbnail";/*** 生成缩略图到指定的目录** @param path  目录* @param files 要生成缩略图的文件列表* @throws IOException*/public static List<String> generateThumbnail2Directory(String path, String... files) throws IOException {return generateThumbnail2Directory(DEFAULT_SCALE, path, files);}/*** 生成缩略图到指定的目录** @param scale    图片缩放率* @param pathname 缩略图保存目录* @param files    要生成缩略图的文件列表* @throws IOException*/public static List<String> generateThumbnail2Directory(double scale, String pathname, String... files) throws IOException {Thumbnails.of(files)// 图片缩放率,不能和size()一起使用.scale(scale)// 缩略图保存目录,该目录需存在,否则报错.toFiles(new File(pathname), Rename.SUFFIX_HYPHEN_THUMBNAIL);List<String> list = new ArrayList<>(files.length);for (String file : files) {list.add(appendSuffix(file, SUFFIX));}return list;}/*** 将指定目录下所有图片生成缩略图** @param pathname 文件目录*/public static void generateDirectoryThumbnail(String pathname) throws IOException {generateDirectoryThumbnail(pathname, DEFAULT_SCALE);}/*** 将指定目录下所有图片生成缩略图** @param pathname 文件目录*/public static void generateDirectoryThumbnail(String pathname, double scale) throws IOException {File[] files = new File(pathname).listFiles();compressRecurse(files, pathname);}/*** 文件追加后缀** @param fileName 原文件名* @param suffix   文件后缀* @return*/public static String appendSuffix(String fileName, String suffix) {String newFileName = "";int indexOfDot = fileName.lastIndexOf('.');if (indexOfDot != -1) {newFileName = fileName.substring(0, indexOfDot);newFileName += suffix;newFileName += fileName.substring(indexOfDot);} else {newFileName = fileName + suffix;}return newFileName;}private static void compressRecurse(File[] files, String pathname) throws IOException {for (File file : files) {// 目录if (file.isDirectory()) {File[] subFiles = file.listFiles();compressRecurse(subFiles, pathname + File.separator + file.getName());} else {// 文件包含压缩文件后缀或非图片格式,则不再压缩String extension = getFileExtention(file.getName());if (!file.getName().contains(SUFFIX) && isImage(extension)) {generateThumbnail2Directory(pathname, file.getAbsolutePath());}}}}/*** 根据文件扩展名判断文件是否图片格式** @param extension 文件扩展名* @return*/public static boolean isImage(String extension) {String[] imageExtension = new String[]{"jpeg", "jpg", "gif", "bmp", "png"};for (String e : imageExtension) if (extension.toLowerCase().equals(e)) return true;return false;}public static String getFileExtention(String fileName) {String extension = fileName.substring(fileName.lastIndexOf(".") + 1);return extension;}
}

测试

1.针对单个文件的测试

String filePath="D:\"+rString+".jpg";
Thumbnails.of(filePath)   .scale(0.4f)  .toFile(filePath);

2.针对一个文件夹下面的所有文件进行缩略

 String path = "D:\\photo\\image";  ImageUtil.generateDirectoryThumbnail(path);

图片可以自己测试

在springboot中使用Thumbnailator缩略图片相关推荐

  1. 在IT产品白皮书中遇到的缩略词

    在IT产品白皮书中遇到的缩略词 更新中...

  2. 网站介绍三合一缩略图片kyuan源码 可自定义增加广告位

    介绍: 网站介绍三合一缩略图片kyuan源码 可自定义增加广告位 上传主机根目录解压打开域名就行. 使用记事本进行修改资料即可 网盘下载地址: http://kekewl.org/E4hICmomNs ...

  3. Discuz! 移动端开发笔记-API篇(一)——获取主题列表中帖子的缩略信息

    一.背景 因为去年掌上论坛的app.小程序和API都开源了,解决了之前想开发移动端Dz应用而没有API的痛点.故最近打算抽空用uin-app做一下Dz的移动端开发. Discuz!掌上论坛APP 源码 ...

  4. php转发朋友圈缩略图片,解释最全的,手把手教的微信JS sdk分享设置教程-微信分享插件PHP源码JS-SDK接口,分享到朋友圈 转发好友带缩略图...

    亲们,此文是我上传的有关微信分享插件PHP源码JS-SDK接口的.rar和.zip的说明使用文件 许多朋友都面临自己编写的网站通过微信转发时,无论是分享微信好友或是微信朋友圈时,出现无缩略图显示的问题 ...

  5. springboot中根据url地址获取图片

    application.yml中,配置路径: file:dir: /mnt/mfs-cli/gf/ //服务器地址#dir: E:\\Area\\anhui //本地地址在Controller文件中, ...

  6. php 指定大小缩略图片

    <?phpclass imgcompress{private $error;public function getError(){return $this->error;}/**** 制作 ...

  7. python缩写词_扩展Python中的英语缩略词

    我把wikipedia的扩展页面压缩成python字典(见下文) 请注意,如您所料,在查询字典时,您一定要使用双引号: 另外,我在维基百科页面中留下了多个选项.你可以随意修改它.注意,对右展开的消歧将 ...

  8. SpringBoot 中的验证码、二维码、缩略图、图片上传、定时器调度

    1.验证码生成 pom.xml 文件中添加依赖: <dependency><groupId>com.github.penggle</groupId><arti ...

  9. java读取图片缩略方法_java 图片缩略图的两种方法

    最近网上看到两种不同的java图片缩略图的绘制方案 第一种,使用Graphics().drawImage按照一定的比例重新绘制图像. Java代码 package com.image.suoluetu ...

最新文章

  1. Javascript作用域原理---预编译
  2. MNN通用端侧深度学习预测框架介绍
  3. mqtt linux 编译,MQTT客户端代码X64位Ubuntu环境编译+测试实践小结
  4. AI换脸引发全民恐慌,用对方向却能推动行业变革
  5. Linux网络编程---I/O复用模型之epoll
  6. 美国特勤局发布十大网络通缉犯名单
  7. 随机样例生成器(外观优化)
  8. java突然无法加载主类_Java 找不到或无法加载主类的修复方法
  9. 博弈论(四)——#10246. 「一本通 6.7 练习 3」取石子
  10. c mysql trans_MYSQL STRICT_TRANS_TABLES使用图解教程
  11. 使用PPT保存300dpi或者指定dpi的高质量图片
  12. linux利用vsftpd 搭建FTP服务器
  13. 【图片】笔记图片资源
  14. dva是什么游戏_Dva爱你哟 她原来就是韩国少女宋哈娜原型
  15. 初学者-CSS思维导图(下)
  16. 5G室内定位来了,化工厂人员定位,电厂室内定位都有用它!-新导智能
  17. 基于改进人工蜂群算法的K均值聚类算法(Matlab代码实现)
  18. 近红外PbSAg2S量子点(齐岳生物)
  19. Java8函数式编程之一: 行为参数化
  20. ubuntu离线安装wireshark

热门文章

  1. 首发仿拼多多源码,程序完整版+安装教程+完美运营
  2. 时间同步/集群时间同步/在线/离线
  3. 时间同步 | chrony 服务
  4. android版本隐藏彩蛋养猫,安卓养猫彩蛋游戏下载-安卓养猫彩蛋 安卓版v0.4.5-PC6手游网...
  5. 自学Java半年,没有包装简历,成功找到工作!!个人经验分享
  6. 081200计算机科学与技术——408计算机学科专业基础——操作系统,知识点整理【更新中】
  7. svg通过虚线画形状
  8. PHP:POST 方法上传
  9. 5G大时代来临智慧城市智能化建设加速完成
  10. STC15F408AS串口发送数据实例