缩略图压缩文件jar包

<!-- 图片缩略图 -->
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>

 按指定大小把图片进行缩放(会遵循原图高宽比例)

//按指定大小把图片进行缩和放(会遵循原图高宽比例)
 //此处把图片压成400×500的缩略图
Thumbnails.of(fromPic).size(400,500).toFile(toPic);
 
//变为400*300,遵循原图比例缩或放到400*某个高度

按照指定比例进行缩小和放大

//按照比例进行缩小和放大
Thumbnails.of(fromPic).scale(0.2f).toFile(toPic);//按比例缩小
Thumbnails.of(fromPic).scale(2f);//按比例放大

  图片尺寸不变,压缩图片文件大小

//图片尺寸不变,压缩图片文件大小outputQuality实现,参数1为最高质量
Thumbnails.of(fromPic).scale(1f).outputQuality(0.25f).toFile(toPic);

  这里只使用了 图片尺寸不变,压缩文件大小 源码

/**
 *
 * @Description:保存图片并且生成缩略图
 * @param imageFile 图片文件
 * @param request 请求对象
 * @param uploadPath 上传目录
 * @return
 */
 public static BaseResult uploadFileAndCreateThumbnail(MultipartFile imageFile,HttpServletRequest request,String uploadPath) {
 if(imageFile == null ){
 return new BaseResult(false, "imageFile不能为空");
 }
  
 if (imageFile.getSize() >= 10*1024*1024)
 {
 return new BaseResult(false, "文件不能大于10M");
 }
 String uuid = UUID.randomUUID().toString();
  
 String fileDirectory = CommonDateUtils.date2string(new Date(), CommonDateUtils.YYYY_MM_DD);
  
 //拼接后台文件名称
 String pathName = fileDirectory + File.separator + uuid + "."
  + FilenameUtils.getExtension(imageFile.getOriginalFilename());
 //构建保存文件路劲
 //2016-5-6 yangkang 修改上传路径为服务器上
 String realPath = request.getServletContext().getRealPath("uploadPath");
 //获取服务器绝对路径 linux 服务器地址 获取当前使用的配置文件配置
 //String urlString=PropertiesUtil.getInstance().getSysPro("uploadPath");
 //拼接文件路劲
 String filePathName = realPath + File.separator + pathName;
 log.info("图片上传路径:"+filePathName);
 //判断文件保存是否存在
 File file = new File(filePathName);
 if (file.getParentFile() != null || !file.getParentFile().isDirectory()) {
 //创建文件
 file.getParentFile().mkdirs();
 }
  
 InputStream inputStream = null;
 FileOutputStream fileOutputStream = null;
 try {
 inputStream = imageFile.getInputStream();
 fileOutputStream = new FileOutputStream(file);
 //写出文件
 //2016-05-12 yangkang 改为增加缓存
// IOUtils.copy(inputStream, fileOutputStream);
 byte[] buffer = new byte[2048];
 IOUtils.copyLarge(inputStream, fileOutputStream, buffer);
 buffer = null;
 
 } catch (IOException e) {
 filePathName = null;
 return new BaseResult(false, "操作失败", e.getMessage());
 } finally {
 try {
 if (inputStream != null) {
  inputStream.close();
 }
 if (fileOutputStream != null) {
  fileOutputStream.flush();
  fileOutputStream.close();
 }
 } catch (IOException e) {
 filePathName = null;
 return new BaseResult(false, "操作失败", e.getMessage());
 }
 }
  
  
 // String fileId = FastDFSClient.uploadFile(file, filePathName);
  
 /**
 * 缩略图begin
 */
  
 //拼接后台文件名称
 String thumbnailPathName = fileDirectory + File.separator + uuid + "small."
   + FilenameUtils.getExtension(imageFile.getOriginalFilename());
 //added by yangkang 2016-3-30 去掉后缀中包含的.png字符串
 if(thumbnailPathName.contains(".png")){
 thumbnailPathName = thumbnailPathName.replace(".png", ".jpg");
 }
 long size = imageFile.getSize();
 double scale = 1.0d ;
 if(size >= 200*1024){
 if(size > 0){
 scale = (200*1024f) / size ;
 }
 }
  
  
 //拼接文件路劲
 String thumbnailFilePathName = realPath + File.separator + thumbnailPathName;
 try {
 //added by chenshun 2016-3-22 注释掉之前长宽的方式,改用大小
// Thumbnails.of(filePathName).size(width, height).toFile(thumbnailFilePathName);
 if(size < 200*1024){
 Thumbnails.of(filePathName).scale(1f).outputFormat("jpg").toFile(thumbnailFilePathName);
 }else{
 Thumbnails.of(filePathName).scale(1f).outputQuality(scale).outputFormat("jpg").toFile(thumbnailFilePathName);
 }
  
 } catch (Exception e1) {
 return new BaseResult(false, "操作失败", e1.getMessage());
 }
 /**
 * 缩略图end
 */
  
 Map<String, Object> map = new HashMap<String, Object>();
 //原图地址
 map.put("originalUrl", pathName);
 //缩略图地址
 map.put("thumbnailUrl", thumbnailPathName);
 return new BaseResult(true, "操作成功", map);
 }

获取当前使用的配置文件信息

/**
* 根据key从gzt.properties配置文件获取配置信息
* @param key 键值
* @return
*/
public String getSysPro(String key){
return getSysPro(key, null);
}
/**
* 根据key从gzt.properties配置文件获取配置信息
* @param key 键值
* @param defaultValue 默认值
* @return
*/
public String getSysPro(String key,String defaultValue){
return getValue("spring/imageserver-"+System.getProperty("spring.profiles.active")+".properties", key, defaultValue);
}

例:

//获取服务器绝对路径 linux 服务器地址
String urlString=PropertiesUtil.getInstance().getSysPro("uploadPath");

 PropertiesUtil 类:

package com.xyz.imageserver.common.properties;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
 
/**
 *
 * @ClassName PropertiesUtil.java
 * @Description 系统配置工具类
 * @author caijy
 * @date 2015年6月9日 上午10:50:38
 * @version 1.0.0
 */
public class PropertiesUtil {
 private Logger logger = LoggerFactory.getLogger(PropertiesUtil.class);
 private ConcurrentHashMap<String, Properties> proMap;
 private PropertiesUtil() {
 proMap = new ConcurrentHashMap<String, Properties>();
 }
 private static PropertiesUtil instance = new PropertiesUtil();
 
 /**
 * 获取单例对象
 * @return
 */
 public static PropertiesUtil getInstance()
 {
 return instance;
 }
  
 /**
 * 根据key从gzt.properties配置文件获取配置信息
 * @param key 键值
 * @return
 */
 public String getSysPro(String key){
 return getSysPro(key, null);
 }
 /**
 * 根据key从gzt.properties配置文件获取配置信息
 * @param key 键值
 * @param defaultValue 默认值
 * @return
 */
 public String getSysPro(String key,String defaultValue){
 return getValue("spring/imageserver-"+System.getProperty("spring.profiles.active")+".properties", key, defaultValue);
 }
 /**
 * 从配置文件中获取对应key值
 * @param fileName 配置文件名
 * @param key key值
 * @param defaultValue 默认值
 * @return
 */
 public String getValue(String fileName,String key,String defaultValue){
 String val = null;
 Properties properties = proMap.get(fileName);
 if(properties == null){
 InputStream inputStream = PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName);
 try {
  properties = new Properties();
 properties.load(new InputStreamReader(inputStream,"UTF-8"));
 proMap.put(fileName, properties);
 val = properties.getProperty(key,defaultValue);
 } catch (IOException e) {
 logger.error("getValue",e);
 }finally{
 try {
  if (inputStream != null) { 
  inputStream.close();
  }
 } catch (IOException e1) {
  logger.error(e1.toString());
 }
 }
 }else{
 val = properties.getProperty(key,defaultValue);
 }
 return val;
 }
}

 

java实现上传图片并压缩图片大小功能的更多相关文章

  1. java 上传图片 并压缩图片大小

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...

  2. java 上传图片 并压缩图片大小(转)

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...

  3. java上传图片并压缩图片大小

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...

  4. 压缩图片大小(Java源码)

    /** * * 直接指定压缩后的宽高: * @param oldFile * 要进行压缩的文件 * @param width * 压缩后的宽度 * @param height * 压缩后的高度 * @ ...

  5. 【问题帖】压缩图片大小至指定Kb以下

    像PS,QQ影像等都有该功能,将图片大小压缩至指定kb以下. 我也来山寨一把,到目前为止,控制图片的大小,平时的解决方案通过分辨率和质量来控制的. 假定最后压缩的大小是100kb,那么在保证不大于10 ...

  6. java上传并压缩图片(等比例压缩或者原尺寸压缩)

    本文转载自http://www.voidcn.com/article/p-npjxrbxr-kd.html 先看效果: 原图:1.33M 处理后:27.4kb 关键代码; package codeGe ...

  7. 上传图片时压缩图片 - 前端(canvas)做法

    HTML前端代码: <?php $this->layout('head'); ?> <?php $this->layout('sidebar'); ?> <m ...

  8. vue + vant 上传图片之压缩图片

    <van-uploader v-model="fileList" multiple :after-read="afterRead" :max-count= ...

  9. java上传图片时压缩图片

    /** * 函数:调整图片尺寸或生成缩略图 v 1.1 * @param $Image 需要调整的图片(含路径) * @param $Dw 调整时最大宽度;缩略图时的绝对宽度 * @param $Dh ...

随机推荐

  1. Android中四大组件

    Activity  BroadCast Receiver 广播接收者 Service  服务 Content Provider 内容提供者   四大组件都需要在清单文件里面配置一下

  2. jstack与jmap分析java堆栈信息

    首先确定要查询的服务进程pid,可用ps -ef|grep 进程名称 jstack -l pid >> stack_info.txt,将此进程的堆栈信息导出到txt文件中 其中" ...

  3. Xcode 插件推荐

    1. Alcatraz(建议安装,以下插件都可以在Alcatraz下载安装) 使用Alcatraz来下载管理Xcode插件, 2.下载安装注释插件VVDocumenter-Xcode. 3.使用代码对 ...

  4. 怎么实时同步java虚拟机与操作系统时区 及JVM启动后再更改操作系统时区或时间也能保持其同步? new date() 时差8个小时的解决方案

    第一种(亲测可以) 在代码当中的Application启动类当中加入代码 @PostConstruct void started() { //时区设置:中国上海 //time.zone: " ...

  5. 注解的使用、拦截器使用、AOP切面使用

    Java 自定义注解及使用场景 转载: https://www.jianshu.com/p/a7bedc771204 Java自定义注解一般使用场景为:自定义注解+拦截器或者AOP,使用自定义注解来自 ...

  6. SQLServer误删ReportServerTempDB导致打不开其他库——解决方案

    无意间删除了ReportServerTempDB库和ReportServer 导致其他库连接不上 错误:报表服务器无法打开与报表服务器数据库的连接.所有请求和处理都要求与数据库建立连接. 解决方案: ...

  7. 帆软报表(finereport)鼠标悬停背景变色

    在报表中,为了突出鼠标所在单元格,当鼠标悬浮时突出背景色(字体),鼠标离开后恢复原有的背景色(字体). 在设计器 模板>模板 Web 属性>填报页面设置,去除填报当前编辑行背景设置的勾选, ...

  8. 在线pdf请你谨慎打开

    本篇其实算之前安全整改话题的一点补充,对之前内容感兴趣的可以走以下快捷通道: 安全漏洞整改系列(二) 安全漏洞整改系列(一) 背景 前不久某家客户对我们提供的系统又进行了一轮安全测试,其中有一条我觉得 ...

  9. CobaltStrike逆向学习系列(8):Beacon 结果回传流程分析

    这是[信安成长计划]的第 8 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 Beacon 接收与处理 0x02 结果回传 Beacon 在接受完命令并执行后,会将数据加密回传给 T ...

  10. NSSCTF-no_wakeup

    打开网页是一个派萌的表情包(原神玩家手动狗头) 按照题目的提示点击,出现题目的源码, 观察题目源码,发现就是一个简单的反序列化,这边手打一下php (自己太菜了,枯了) <?phpclass H ...