對上傳的圖片進行等比例壓縮
阿新 • • 發佈:2018-12-09
/** * 修改系統Logo * @param file * @param systemBasicConfigurationDTO */ @PutMapping(value = "/updateSystemLogo") @ApiOperation(value = "修改系統Logo", notes = "修改系統Logo的介面") public R updateSystemLogo(MultipartFile file, SystemBasicConfigurationDTO systemBasicConfigurationDTO) { try { SystemBasicConfiguration systemBasicConfiguration = new SystemBasicConfiguration(); BeanUtils.copyProperties(systemBasicConfigurationDTO, systemBasicConfiguration); String systemConfigurationKey = systemBasicConfiguration.getConfigKey(); InputStream input = file.getInputStream(); Long imgaeSize = file.getSize(); if (imgaeSize > 4 * 1024 * 1024) { return R.error().msg("圖片超過4M大小"); } //按比例壓縮圖片 InputStream result = reduceImg(input, "upload.png", 0.5); SystemBasicConfiguration sbc = new SystemBasicConfiguration(); sbc.setConfigKey(systemConfigurationKey); EntityWrapper<SystemBasicConfiguration> wrapper = new EntityWrapper<>(); wrapper.setEntity(sbc); systemBasicConfiguration.setConfigValue(Image2Base64Utils.imgFileToBase64(result)); systemBasicConfigurationService.update(systemBasicConfiguration, wrapper); return R.ok().data("成功修改系統Logo"); } catch (Exception e) { return R.error().msg(e.getMessage()); } } /** * @description 按比例壓縮圖片 * @param is 源圖片流 * @param imgdist 圖片名字 * @param rate 壓縮比例 * @return */ public static InputStream reduceImg(InputStream is, String imgdist, Double rate) { try { int widthdist = 0; int heightdist = 0; BufferedImage sourceImg = ImageIO.read(is); widthdist = (int) (sourceImg.getWidth() * rate); heightdist = (int) (sourceImg.getHeight() * rate); // 開始讀取檔案並進行壓縮 BufferedImage tag = new BufferedImage((int) widthdist, (int) heightdist, BufferedImage.TYPE_INT_RGB); tag.getGraphics() .drawImage(sourceImg.getScaledInstance(widthdist, heightdist, Image.SCALE_SMOOTH), 0, 0, null); FileOutputStream out = new FileOutputStream(imgdist); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(tag); out.close(); File srcfile = new File(imgdist); InputStream result = new FileInputStream(srcfile); return result; } catch (IOException ex) { ex.printStackTrace(); } return null; }