import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
//import com.sun.image.codec.jpeg.JPEGCodec;
//import com.sun.image.codec.jpeg.JPEGImageEncoder;
@Component
public class ImgTool {
public static String imgPath ;
@Value("${userconfig.img-path}")
public String imgPaths ;
@PostConstruct
public void init() {
imgPath = imgPaths;
* 指定图片宽度和高度和压缩比例对图片进行压缩
* @param imgsrc
* 源图片地址
* @param imgdist
* 目标图片地址
* @param widthdist
* 压缩后图片的宽度
* @param heightdist
* 压缩后图片的高度
* @param rate
* 压缩的比例
public static void reduceImg(String imgsrc, String imgdist, int widthdist, int heightdist, Float rate) {
try {
File srcfile = new File(imgsrc);
// 检查图片文件是否存在
if (!srcfile.exists()) {
System.out.println("文件不存在");
// 如果比例不为空则说明是按比例压缩
if (rate != null && rate > 0) {
//获得源图片的宽高存入数组中
int[] results = getImgWidthHeight(srcfile);
if (results == null || results[0] == 0 || results[1] == 0) {
return;
} else {
//按比例缩放或扩大图片大小,将浮点型转为整型
widthdist = (int) (results[0] * rate);
heightdist = (int) (results[1] * rate);
// 开始读取文件并进行压缩
Image src = ImageIO.read(srcfile);
// 构造一个类型为预定义图像类型之一的 BufferedImage
BufferedImage tag = new BufferedImage((int) widthdist, (int) heightdist, BufferedImage.TYPE_INT_RGB);
//绘制图像 getScaledInstance表示创建此图像的缩放版本,返回一个新的缩放版本Image,按指定的width,height呈现图像
//Image.SCALE_SMOOTH,选择图像平滑度比缩放速度具有更高优先级的图像缩放算法。
tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist, Image.SCALE_SMOOTH), 0, 0, null);
//创建文件输出流
FileOutputStream out = new FileOutputStream(imgdist);
//将图片按JPEG压缩,保存到out中
//JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
//encoder.encode(tag);
//关闭文件输出流
ImageIO.write(tag, "jpg", out);
out.close();
} catch (Exception ef) {
ef.printStackTrace();
* 获取图片宽度和高度
* @param
* @return 返回图片的宽度
public static int[] getImgWidthHeight(File file) {
InputStream is = null;
BufferedImage src = null;
int result[] = { 0, 0 };
try {
// 获得文件输入流
is = new FileInputStream(file);
// 从流里将图片写入缓冲图片区
src = ImageIO.read(is);
result[0] =src.getWidth(null); // 得到源图片宽
result[1] =src.getHeight(null);// 得到源图片高
is.close(); //关闭输入流
} catch (Exception ef) {
ef.printStackTrace();
return result;
* 将图片转换成Base64编码
* @param imgFile 待处理图片
* @return
public static String getImgStr(String imgFile) {
// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
InputStream in = null;
byte[] data = null;
// 读取图片字节数组
try {
in = new FileInputStream(imgFile);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
return Base64.encodeBase64String(data);
public static Map
uploadImg(MultipartFile img) {
Map data = new HashMap();
String contentType = img.getContentType(); // 获取文件的类型
long size=img.getSize();
System.out.println("文件大小为:"+size);
System.out.println("文件类型为:" + contentType);
String originalFilename = img.getOriginalFilename(); // 获取文件的原始名称
// 获取文件扩展名,如 abc.de.jpg,就获取 jpg
String extensionName = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
// 设置上传文件的文件名,防止命名冲突导致覆盖
String uploadFilename = UUID.randomUUID().toString() + "." + extensionName;
// 判断文件是否为空
if (!img.isEmpty()) {
File targetImg = new File(imgPath);
// 判断文件夹是否存在
if (!targetImg.exists()) {
targetImg.mkdirs(); // 级联创建文件夹
try {
// 开始保存图片
FileOutputStream outputStream = new FileOutputStream(imgPath+"/" + uploadFilename);
outputStream.write(img.getBytes());
outputStream.flush();
outputStream.close();
// while (size>203776) {
// reduceImg(imgPath+"/"+ originalFilename, imgPath+"/"+ originalFilename, 0, 0,(float)0.6);
// File distfile = new File(imgPath+"/"+ originalFilename);
// size= distfile.length();
// System.out.println("压缩文件大小为:"+size);
// }
data.put("code",1);
data.put("src",uploadFilename);
//return 1;
} catch (IOException e) {
data.put("code",0);
data.put("src","");
e.printStackTrace();
//return 0;
}else {
data.put("code",0);
data.put("src","");
//return 0;
return data;
扫描二维码推送至手机访问。
版权声明:本文由
HUYANG
发布,如需转载请注明出处。
本文链接:
http://hmilly.cn/?id=15
分享给朋友:
package com.csxxjs.jxpk.web.tools; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; im...
package com.csxxjs.jxpk.web.tools; import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpEntity; import org.apache.htt...
package com.csxxjs.jxpk.web.service; import com.alibaba.fastjson.JSONArray; import com.csxxjs.jxpk.web.dao.WzgMedicalPayWechatDAO;...
package com.jeesite.modules.tools; import org.junit.Test; import org.springframework.beans.factory.annotation.Value; import ...
package com.csxxjs.sldingshi.tool; import com.itextpdf.text.*; import com.itextpdf.text.pdf.PdfName; import com.itextpdf.text...
com.csxxjs.sldingshi.tool; lombok.extern.slf4j.; org.jfree.chart.ChartFactory; org.jfree.chart.ChartUtilities; org.jfree.chart.JFreeChart; org....