BufferedInputStream与ImageInputStream

转载自 BufferedInputStream与ImageInputStream

BufferedInputStream读取图片文件(jpg格式),但是图片大小在1M到200M之间都有,由于图片太大,不知道怎么处理好,谢谢各位大哥大姐教教小弟,现在只能读取1M以下读图片,但要求是需要读取1M到200M的大图片

下面是方法的代码:

 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-0.4.3.jar

2.纯java处理图片只能开大内存,吧虚拟机内存开到1G去,java处理图片全部都是在内存里的。有个VolatileImage据说可以利用显存,但是我曾经试过的效果还不如bufferedimage。

当然最好的办法就是分块读取、分块处理,这样最怕1G的图片也没有任何问题,不过算法就比较复杂了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值