2012-02-18 69 views
0

我在數據庫中存儲了一些圖像,同時檢索它們,我想將其大小調整爲177x122。我怎麼能在JAVA中做到這一點? 這是我用來從數據庫檢索圖像的一些代碼,需要做些什麼改變才能獲得177x122的圖像。從數據庫中以不同大小檢索圖像

PreparedStatement pstm1 = con.prepareStatement("select * from image"); 
      ResultSet rs1 = pstm1.executeQuery(); 
      while(rs1.next()) { 
       InputStream fis1; 
       FileOutputStream fos; 
       String image_id; 
       try { 
        fis1 = rs1.getBinaryStream("image"); 
        image_id=rs1.getString("image_id"); 
        fos = new FileOutputStream(new File("images" + (image_id) + ".jpg")); 
        int c; 
        while ((c = fis1.read()) != -1) { 
         fos.write(c); 
        } 
        fis1.close(); 
        fos.close(); 
        JOptionPane.showMessageDialog(null, "Image Successfully Retrieved"); 

       } catch (Exception ex) { 
        System.out.println(ex); 
       } 
      } 

回答

3

您可以使用AWT提供的BufferedImage和Graphics2D類來調整圖像大小。 Source

BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type); 
Graphics2D g = resizedImage.createGraphics(); 
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null); 
g.dispose(); 
1

假設在image列中的數據是圖像格式的Java圖像I/O可以讀取(如JP​​EG和PNG),則Thumbnailator庫應該能夠實現這一點。

這將檢索來自ResultSet圖像數據作爲InputStream並寫入指定的文件中的代碼可以這樣寫:

// Get the information we need from the database. 
String imageId = rs1.getString("image_id"); 
InputStream is = rs1.getBinaryStream("image"); 

// Perform the thumbnail generation. 
// You may want to substitute variables for the hard-coded 177 and 122. 
Thumbnails.of(is) 
    .size(177, 122) 
    .toFile("images" + (imageId) + ".jpg"); 

// Thumbnailator does not automatically close InputStreams 
// (which is actually a good thing!), so we'll have to close it. 
is.close(); 

(我應該放棄,我還沒有實際運行該代碼針對一個實際的數據庫。)

Thumbnailator將讀取從InputStreamimage柱檢索二進制數據的圖像數據,然後調整圖像的大小以裝配到172 X 122區域,最後輸出噸他將縮略圖作爲JPEG指定給指定的文件。

默認情況下,Thumbnailator將在調整圖像大小時保留原始圖像的寬高比(以防止縮略圖看起來失真),因此圖像大小不一定是172 x 122。如果此行爲不合需要,則調用forceSize方法代替size方法可以實現這一點。

聲明:我維護Thumbnailator庫。