java圖片壓縮
/**
- 改變圖片的大小到寬為size,然后高隨著寬等比例變化
- @param is 上傳的圖片的輸入流
- @param os 改變了圖片的大小后,把圖片的流輸出到目標OutputStream
- @param size 新圖片的寬
- @param format 新圖片的格式
@throws IOException / public static void resizeImage1(InputStream is, OutputStream os, int size, String format) {
try { BufferedImage prevImage = ImageIO.read(is);
double width = prevImage.getWidth();
double height = prevImage.getHeight();
double percent = size/width;
int newWidth = (int)(width percent);
int newHeight = (int)(height percent);
BufferedImage image = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_BGR);
//以下代碼在壓縮圖片透明背景會變成變黑色 / Graphics graphics = image.createGraphics();
graphics.drawImage(prevImage, 0, 0, newWidth, newHeight, null);
ImageIO.write(image, format, os);*/
///////////////////////////////////////////以下代碼解決在壓縮png格式的圖片透明背景會變成變黑色的問題 Graphics2D g2d = image.createGraphics(); image = g2d.getDeviceConfiguration().createCompatibleImage(newWidth,newHeight,Transparency.TRANSLUCENT); g2d.dispose(); g2d = image.createGraphics(); Image from = prevImage.getScaledInstance(newWidth, newHeight, prevImage.SCALE_AREA_AVERAGING); g2d.drawImage(from, 0, 0, null); g2d.dispose(); ImageIO.write(image, format,os); os.flush();
is.close();
os.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }
} </pre>