BufferedInputStreamとImageInputStream

3401 ワード

転載してから BufferedInputStreamとImageInputStream
BufferedInputStreamで画像ファイルを読みましたが、画像のサイズは1 Mから200 Mの間にあります。写真が大きすぎて、どうすればいいか分かりません。ありがとうございます。兄と姉は弟に教えてくれました。今は1 M以下の画像しか読めませんが、1 Mから200 Mの大きな画像を読み込む必要があります。
以下は方法のコードです。
 public String  changeImg2(String filename)
    {       //ImgRotate ir = new ImgRotate();
        String result="";
        File file1 = new File(filename);
        BufferedImage image = null;  
         int  height =0;
        int  width =0;
        try {   
           // image = ImageIO.read(file1); 
            //int width = image.getWidth();
           // int height = image.getHeight();
       
            //ImgRotate ir = new ImgRotate();
            Iterator   readers = null;
            if((filename.substring(filename.lastIndexOf(".")+1).equals("jpg"))){
                 readers   =   ImageIO.getImageReadersByFormatName( "jpg"); 
            }else if((filename.substring(filename.lastIndexOf(".")+1).equals("bmp"))){
                    readers   =   ImageIO.getImageReadersByFormatName( "bmp"); 
            }else if((filename.substring(filename.lastIndexOf(".")+1).equals("jpeg"))){
                    readers   =   ImageIO.getImageReadersByFormatName( "jpeg"); 
            }else if((filename.substring(filename.lastIndexOf(".")+1).equals("gif"))){
                    readers   =   ImageIO.getImageReadersByFormatName( "gif"); 
            }
            
                ImageReader   reader   =   (ImageReader)readers.next(); 
            try   { 
                   // FileInputStream   source   =   new   FileInputStream(filename);//your   image   path 
                 //   FileReader source= new FileReader(filename);
                
                //InputStream source=new DataInputStream(new BufferedInputStream(new FileInputStream(filename)));
                
                    BufferedInputStream  source = new BufferedInputStream(new FileInputStream(filename));
                    
                     ImageInputStream iis=   ImageIO.createImageInputStream(source); 
                   
                   
                    reader.setInput(iis,true); 
                      height   =   reader.getHeight(0); 
                      width   =   reader.getWidth(0); 
                      
                     result=String.valueOf(width)+","+String.valueOf(height);
                   reader.dispose(); 
                   iis.close(); 
                   
                   source.close(); 
                   if(width>height)
                   {
                          rotateImage(file1,90);
                   }
                   System.out.println("width="+width);
                   System.out.println("height="+height);
                    
            }   catch(Exception   e)   { 
                e.printStackTrace();
                    System.out.println(e.getMessage()); 
            }
         
            
        } catch (Exception e) {   
            e.printStackTrace();   
        } 
        return result;
1.在庫がありますが、使ってみますか?thumbnailator-00.3.3.jar
2.純java処理画像は大きなメモリしか開けられません。仮想マシンのメモリは1 Gまで開いて、java処理画像は全部メモリにあります。VolatileImageは現存を利用できると言われていますが、試した効果はまだbufferedmageに及ばないです。
もちろん一番いい方法はブロックに分けて読み取って、ブロックに分けて処理することです。これで1 Gの画像が一番怖いです。でも、アルゴリズムは複雑です。