/**
* 修改系统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;
}