2014-06-27 40 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; 
} 

我没有使用其它的代码。

希望能帮助别人!

相关问题