修改图片dpi
工具类
修改dpi:DPIHandleHelper.java
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class DPIHandleHelper {
private static int DPI = 300;
public static void main(String[] args) {
String path = "C:\\javaSoft\\fileUpload\\图片1.jpg";
File file = new File(path);
handleDpi(file, 300, 300);
}
public static void handleDpi(File file, int xDensity, int yDensity) {
try {
BufferedImage image = ImageIO.read(file);
JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(new FileOutputStream(file));
JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(image);
jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
jpegEncoder.setJPEGEncodeParam(jpegEncodeParam);
jpegEncodeParam.setQuality(0.75f, false);
jpegEncodeParam.setXDensity(xDensity);
jpegEncodeParam.setYDensity(yDensity);
jpegEncodeParam.getXDensity();
jpegEncoder.encode(image, jpegEncodeParam);
image.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
public static int getDpi(File file){
int dpi = 0;
try {
BufferedImage image = ImageIO.read(file);
JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(new FileOutputStream(file));
JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(image);
if (jpegEncodeParam.getXDensity() == jpegEncodeParam.getYDensity() ){
dpi = jpegEncodeParam.getXDensity();
return dpi;
}
} catch (IOException e) {
e.printStackTrace();
}
return dpi;
}
}
修改位深度: FileUtils.java
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.io.*;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
public class FileUtils {
public static String normalizePath(String path) {
String result = path.replaceAll("/+", Matcher.quoteReplacement(File.separator));
return result.replaceAll("\\\\+", Matcher.quoteReplacement(File.separator));
}
public static Map<String, Object> uploadFile(String filePath, MultipartFile file) throws Exception {
String fileName = file.getOriginalFilename();
String pathUrl = normalizePath(filePath + File.separator + fileName);
File file1 = new File(pathUrl);
if (!file1.getParentFile().exists()) {
file1.getParentFile().mkdir();
}
org.apache.commons.io.FileUtils.copyInputStreamToFile(file.getInputStream(), file1);
Map<String, Object> map = new HashMap<>();
map.put("fileName", fileName);
map.put("fileOriginalName", file.getOriginalFilename());
map.put("fileSize", file.getSize());
return map;
}
public static String downloadFile(HttpServletResponse response, String filename, String path) {
String fileName = filename;
if (fileName != null) {
File file = new File(path+filename);
if (file.exists()) {
response.setContentType("application/force-download");
try {
response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName,"utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
byte[] buffer = new byte[1024];
FileInputStream fis = null;
BufferedInputStream bis = null;
try {
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
OutputStream os = response.getOutputStream();
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer, 0, i);
i = bis.read(buffer);
}
return "下载成功";
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
return "下载失败";
}
public static void changJPG(File uploadFile) throws IOException {
String path = uploadFile.getPath();
BufferedImage bufferedImage = ImageIO.read(uploadFile);
BufferedImage newBufferedImage = new BufferedImage(bufferedImage.getWidth(),
bufferedImage.getHeight(), BufferedImage.TYPE_INT_RGB);
newBufferedImage.createGraphics().drawImage(bufferedImage, 0, 0, Color.WHITE, null);
String fileName = path.substring(0, path.lastIndexOf("."));
ImageIO.write(newBufferedImage, "jpg", new File(fileName + ".jpg"));
}
public static String getJPGDeep(String filename) throws IOException {
File picture = new File(filename);
BufferedImage sourceImg = ImageIO.read(new FileInputStream(picture));
ColorModel color = sourceImg.getColorModel();
return "位深度:" + color.getPixelSize();
}
}
使用:
Map<String, Object> stringObjectMap = FileUtils.uploadFile(path, file);
String fileOriginalName = FileUtils.normalizePath(path + stringObjectMap.get("fileOriginalName").toString());
File file2 = new File(fileOriginalName);
if (!"24".equals(FileUtils.getJPGDeep(fileOriginalName))){
FileUtils.changJPG(new File(fileOriginalName));
}
DPIHandleHelper.handleDpi(file2,300,300);