在Java中常常使用java.awt.Image庫所提供的方法進行圖像的縮放、及裁切。我們可以使用Graphics2D
g = image.createGraphics()的方式得到Graphics物件,並且可以對其繪製圖案上去,但是縮放圖片時,若直接使用draw方法繪製會產生極大的問題,如題Qualtiy降低的問題,在這裡我也提供了解決的方案與原始程式碼的比照。
低畫質的縮圖程式碼
| 
if (imgtype == BufferedImage.TYPE_BYTE_INDEXED || imgtype == BufferedImage.TYPE_BYTE_BINARY) { 
     IndexColorModel
  icm = (IndexColorModel) source.getColorModel(); 
     image
  = new BufferedImage(width, height,
  imgtype, icm); 
} else { 
     image
  = new BufferedImage(width,
  height, imgtype); 
} 
Graphics g = image.getGraphics(); 
g.drawImage(source,
  0, 0, width, height, null); | 
Smooth解法程式碼
| 
ColorModel dstCM =
  source.getColorModel(); 
image = new BufferedImage(dstCM,
  dstCM.createCompatibleWritableRaster(width, height), 
         dstCM.isAlphaPremultiplied(),
  null); 
Image scaleImage =
  source.getScaledInstance(width, height, Image.SCALE_SMOOTH); 
Graphics2D g =
  image.createGraphics(); 
g.drawImage(scaleImage,
  0, 0, width, height, null); | 
縮圖品質比較 :
總表比較 :
| 
總類 | 
畫質 | 
檔案大小 | 
| 
低畫質縮圖 | 
低 | 
7.84kb | 
| 
Smooth解法 | 
高 | 
7.84kb | 
由此可以下個結論,直接使用draw繪圖不僅得到低畫質的圖片,也無法得到較低的檔案大小,所以以後使用縮圖就要使用Smooth解法來解。

 
 
