PhotoGallery/src/main/java/com/example/PhotoGallery/Services/ImageCompression.java

59 lines
2.1 KiB
Java

package com.example.PhotoGallery.Services;
import java.io.FileOutputStream;
import javax.imageio.*;
import javax.imageio.stream.ImageOutputStream;
import org.springframework.stereotype.Service;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
@Service
public class ImageCompression {
boolean compressImage(String originalImgPath, String compressedImgOutputPath) {
try {
File originalFile = new File(originalImgPath);
BufferedImage original = ImageIO.read(originalFile);
// Resize manually
int newWidth = 1000;
// Prevent division by zero if width is 0
if (original.getWidth() == 0) return false;
int newHeight = (original.getHeight() * newWidth) / original.getWidth();
Image scaled = original.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);
BufferedImage resized = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = resized.createGraphics();
g2d.drawImage(scaled, 0, 0, null);
g2d.dispose();
// Write with compression
String fileName = originalFile.getName();
File outFile = new File(compressedImgOutputPath, fileName);
try (FileOutputStream fos = new FileOutputStream(outFile)) {
ImageWriter jpgWriter = ImageIO.getImageWritersByFormatName("jpg").next();
ImageWriteParam param = jpgWriter.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.7f); // 0.0=lowest, 1.0=highest
try (ImageOutputStream ios = ImageIO.createImageOutputStream(fos)) {
jpgWriter.setOutput(ios);
jpgWriter.write(null, new IIOImage(resized, null, null), param);
}
jpgWriter.dispose();
return true;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}