在Java中可以使用javax.imageio包中的類來壓縮圖片大小而不改變圖片分辨率。下面是一個壓縮圖片大小的示例代碼:
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageCompressor {
public static void main(String[] args) {
String inputImagePath = "input.jpg";
String outputImagePath = "output.jpg";
int newWidth = 800; // 壓縮后的圖片寬度
int newHeight = 600; // 壓縮后的圖片高度
try {
// 讀取原始圖片
BufferedImage originalImage = ImageIO.read(new File(inputImagePath));
int originalWidth = originalImage.getWidth();
int originalHeight = originalImage.getHeight();
// 創建一個新的圖像對象,并指定壓縮后的寬高
BufferedImage resizedImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = resizedImage.createGraphics();
// 使用抗鋸齒渲染
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
// 繪制壓縮后的圖像
g.drawImage(originalImage, 0, 0, newWidth, newHeight, 0, 0, originalWidth, originalHeight, null);
g.dispose();
// 將壓縮后的圖像保存到指定路徑
ImageIO.write(resizedImage, "jpg", new File(outputImagePath));
System.out.println("圖片壓縮成功!");
} catch (IOException ex) {
System.out.println("圖片壓縮失敗:" + ex.getMessage());
}
}
}
在這個示例代碼中,我們首先指定了原始圖片路徑(inputImagePath)和壓縮后圖片的路徑(outputImagePath),以及壓縮后的寬度(newWidth)和高度(newHeight)。
然后,我們使用ImageIO類的read
方法讀取原始圖片,并獲取原始圖片的寬度和高度。
接下來,我們創建一個新的BufferedImage對象,并指定寬度和高度為壓縮后的尺寸。
然后,我們使用Graphics2D對象的drawImage
方法將原始圖片繪制到新的BufferedImage對象上,指定繪制的區域為壓縮后的尺寸。
最后,我們使用ImageIO類的write
方法將壓縮后的圖像保存到指定路徑。
注意,在這個示例代碼中,我們使用了抗鋸齒渲染(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR
),以保持壓縮后的圖像質量。你也可以根據需要選擇其他的渲染方式。
此外,你還可以根據實際情況對壓縮后的圖像進行其他處理,比如調整亮度、對比度等。