赞
踩
package com.ai157.aigc.utils; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.io.InputStream; public class MyFileUtils { public static File convert(MultipartFile multipartFile) throws IOException { File file = new File(multipartFile.getOriginalFilename()); try (InputStream is = multipartFile.getInputStream()) { org.apache.commons.io.FileUtils.copyInputStreamToFile(is, file); } return file; } }
package com.ai157.aigc.controller; import com.ai157.aigc.utils.MyFileUtils; import org.apache.commons.io.FileUtils; import org.csource.common.MyException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.Base64; @RestController public class FileSmallController { @PostMapping("/api/file/small") public String handleFileUpload(@RequestParam("file") MultipartFile file, @RequestParam("scale") Float scale, @RequestParam("fileType") String fileType ) { try { scale = scale/100;//由于我的界面上输入的是百分比数据,所以要除以100 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); compress(MyFileUtils.convert(file),byteArrayOutputStream,scale); return Base64.getEncoder().encodeToString( byteArrayOutputStream.toByteArray()); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { throw new RuntimeException(e); } return "File uploaded successfully!"; } /** *这个是处理方法 */ public static void compress(File srcFile, ByteArrayOutputStream byteArrayOutputStream, float scale) { scale = (float) Math.sqrt(scale); try { BufferedImage srcImage = ImageIO.read(srcFile); int width = (int) (srcImage.getWidth() * scale); int height = (int) (srcImage.getHeight() * scale); BufferedImage destImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); destImage.getGraphics().drawImage(srcImage.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH), 0, 0, null); ImageIO.write(destImage, "png", byteArrayOutputStream); } catch (IOException e) { e.printStackTrace(); } } }
注意下:
1、scale = scale/100;这个为什么除以100,由于前端上传的不是小数,是百分比数值。
2、由于长度和宽度是等比缩小,如果长度是a,宽度是b,那(ax)*(bx)= scale*a*b
所以x平方等于scale。所以在计算前要开方下。
3、由于前端是以图片的方式渲染,所以以Base64的图片数据输出。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。