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);
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值