zoukankan      html  css  js  c++  java
  • java实现上传图片并压缩图片大小功能

    缩略图压缩文件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;
     }
    }

     

  • 相关阅读:
    改造vant日期选择
    css3元素垂直居中
    npm综合
    (转)网页加水印方法
    Mac下IDEA自带MAVEN插件的全局环境配置
    隐藏注册控件窗口
    High performance optimization and acceleration for randomWalk, deepwalk, node2vec (Python)
    How to add conda env into jupyter notebook installed by pip
    The Power of WordNet and How to Use It in Python
    背单词app测评,2018年
  • 原文地址:https://www.cnblogs.com/wangjintao-0623/p/11692926.html
Copyright © 2011-2022 走看看