2014-06-27 39 views
0

我有這樣的代碼,我得到一個InputStream並創建圖像:如何從InputStream創建圖像,調整其大小並保存它?

Part file; 
// more code 
try { 
     InputStream is = file.getInputStream(); 

     File f = new File("C:\\ImagenesAlmacen\\QR\\olaKeAse.jpg"); 

     OutputStream os = new FileOutputStream(f); 
     byte[] buf = new byte[1024]; 
     int len; 

     while ((len = is.read(buf)) > 0) { 
      os.write(buf, 0, len); 
     } 

     os.close(); 
     is.close(); 

    } catch (IOException e) { 
     System.out.println("Error"); 
    } 

的問題是,我必須調整該圖像之前我創建如果從InputStream

因此,如何調整我從InputStream獲得,然後創建調整大小的圖像。我想將圖像的最大一面設置爲180px,並以該比例調整另一面的大小。

實施例:

圖片= 289px * 206px 調整大小圖像= 180像素* 128px

+0

你永遠不會刷新'OutputStream'。至於你的問題的其他部分,你可以在這裏找到答案:http://stackoverflow.com/questions/244164/ – blgt

+0

@blgt好吧,請幫我沖洗部分。我嘗試了另一個問題。現在我有了一個BufferedImage,如何將它保存爲jpg圖像「C:\\ ImagenesAlmacen \\ QR \\ olaKeAse.jpg」? –

+0

通過完成上述操作,只需在os.close()之前添加'os.flush();' – blgt

回答

3

我這樣做:

try { 

     InputStream is = file.getInputStream(); 
     Image image = ImageIO.read(is); 

     BufferedImage bi = this.createResizedCopy(image, 180, 180, true); 
     ImageIO.write(bi, "jpg", new File("C:\\ImagenesAlmacen\\QR\\olaKeAse.jpg")); 

    } catch (IOException e) { 
     System.out.println("Error"); 
    } 

BufferedImage createResizedCopy(Image originalImage, int scaledWidth, int scaledHeight, boolean preserveAlpha) { 
    int imageType = preserveAlpha ? BufferedImage.TYPE_INT_RGB : BufferedImage.TYPE_INT_ARGB; 
    BufferedImage scaledBI = new BufferedImage(scaledWidth, scaledHeight, imageType); 
    Graphics2D g = scaledBI.createGraphics(); 
    if (preserveAlpha) { 
     g.setComposite(AlphaComposite.Src); 
    } 
    g.drawImage(originalImage, 0, 0, scaledWidth, scaledHeight, null); 
    g.dispose(); 
    return scaledBI; 
} 

我沒有使用其它的代碼。

希望能幫助別人!

相關問題