java将图片压缩到指定大小以内并保存图片(图片缩略)
java将图片压缩到指定大小以内并保存图片(图片缩略)
·
1:本地文件的压缩
public static void main(String[] args) {
//String path="C:\\Users\\dell\\Desktop\\文章\\6.png";
String path = "C:\\Users\\dell\\Desktop\\微信图片_20230201212653.png";
try {
//图片所在路径
BufferedImage templateImage = ImageIO.read(new File(path));
//原始图片的长度和宽度
int height = templateImage.getHeight();
int width = templateImage.getWidth();
//通过比例压缩
float scale = 0.5f;
//通过固定长度压缩
int doWithHeight = 200;
int dowithWidth = 200;
//压缩之后的长度和宽度
// int doWithHeight = (int) (scale * height);
//int dowithWidth = (int) (scale * width);
BufferedImage finalImage = new BufferedImage(dowithWidth, doWithHeight, BufferedImage.TYPE_INT_RGB);
finalImage.getGraphics().drawImage(templateImage.getScaledInstance(dowithWidth, doWithHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null);
//图片输出路径,以及图片名
FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\dell\\Desktop\\文章\\6-200.png");
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fileOutputStream);
encoder.encode(finalImage);
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
2:url文件的压缩
@SneakyThrows
public static void main(String[] args) {
//String path="C:\\Users\\dell\\Desktop\\文章\\6.png";
// String path = "C:\\Users\\dell\\Desktop\\微信图片_20230201212653.png";
String path = "http://192.168.11.50:8081/jeecg-boot/sys/sysMeetingManage/download/8b2a7891-6606-470a-b6b8-fbdf0296e214.png";
URL url = new URL(path);
String replaceName = new File(path).getName().replace(".", "-200x200.");
//图片所在路径
BufferedImage templateImage = ImageIO.read(url);
//原始图片的长度和宽度
int height = templateImage.getHeight();
int width = templateImage.getWidth();
//通过比例压缩
float scale = 0.5f;
//通过固定长度压缩
int doWithHeight = 200;
int dowithWidth = 200;
//压缩之后的长度和宽度
// int doWithHeight = (int) (scale * height);
//int dowithWidth = (int) (scale * width);
BufferedImage finalImage = new BufferedImage(dowithWidth, doWithHeight, BufferedImage.TYPE_INT_RGB);
finalImage.getGraphics().drawImage(templateImage.getScaledInstance(dowithWidth, doWithHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null);
//图片输出路径,以及图片名
FileOutputStream fileOutputStream = new FileOutputStream("D:\\opt\\upFiles\\8b2a7891-6606-470a-b6b8-fbdf0296e214-200x200.png");
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fileOutputStream);
encoder.encode(finalImage);
fileOutputStream.close();
}
3:图片缩略到指定大小
@SneakyThrows
public static void main(String[] args) {
//String path="C:\\Users\\dell\\Desktop\\文章\\6.png";
// String path = "C:\\Users\\dell\\Desktop\\微信图片_20230201212653.png";
String path = "http://192.168.11.50:8081/jeecg-boot/sys/sysMeetingManage/download/68ac9b4d-ef21-414c-8b31-18998aadf4c7.png";
String substring = path.substring(path.lastIndexOf("/")+1);
File file = new File("D://opt//upFiles//" + substring);
boolean exists = file.exists();
if (exists){
Thumbnails.of(file).size(200,200).toFile("D://opt//upFiles//"+ getFileNameNoEx(substring)+"_200_200"+ getFileNameEx(substring));
}else {
System.out.println("文件不存在");
}
}
public void saveFileFromInputStream(InputStream is, String path, String filename, int fileSize) throws IOException {
String fullPathName = "";
if (isWindows()) {
fullPathName = path + "\\" + filename;
} else {
fullPathName = path + "/" + filename;
}
FileOutputStream fs = new FileOutputStream(fullPathName);
byte[] buffer = null;
if (fileSize > (1024 * 1024)) {
buffer = new byte[1024 * 1024];// 按1M写入
} else {
buffer = new byte[fileSize];// 按1M写入
}
int byteread = 0;
while ((byteread = is.read(buffer)) != -1) {
fs.write(buffer, 0, byteread);
fs.flush();
}
fs.close();
is.close();
//写入缩略图
if( filename.toUpperCase().endsWith(".PNG") || filename.toUpperCase().contains(".JPEG") || filename.toUpperCase().contains(".JPG") )
{
String thumFilePath = "";
if (isWindows()) {
thumFilePath = path + "\\" + getFileNameNoEx(filename)+"_200_200"+ getFileNameEx(filename);
} else {
thumFilePath = path + "/" + getFileNameNoEx(filename)+"_200_200"+ getFileNameEx(filename);;
}
Thumbnails.of(fullPathName).size(200,200).toFile(thumFilePath);
}
}
public static boolean isLinux() {
return System.getProperty("os.name").toLowerCase().indexOf("linux") >= 0;
}
public static boolean isWindows() {
return System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0;
}
public static String getFileNameNoEx(String filename) {
if ((filename != null) && (filename.length() > 0)) {
int dot = filename.lastIndexOf('.');
if ((dot >-1) && (dot < (filename.length()))) {
return filename.substring(0, dot);
}
}
return filename;
}
public static String getFileNameEx(String filename) {
if ((filename != null) && (filename.length() > 0)) {
int dot = filename.lastIndexOf('.');
if ((dot >-1) && (dot < (filename.length()))) {
return filename.substring(dot, filename.length());
}
}
return filename;
}
注意:踩过的坑,文件名不可以带*号,带*会报java.io.FileNotFoundException
更多推荐
已为社区贡献14条内容
所有评论(0)