开发者社区> 问答> 正文

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)// ��� ����ڸߣ�����������ת 90
                   {
                          rotateImage(file1,90); //��ת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;

展开
收起
kun坤 2020-06-07 22:11:16 589 0
1 条回答
写回答
取消 提交回答
  • 有一个库你尝试用一下吧?thumbnailator-0.4.3.jar######+1######

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

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

    2020-06-07 22:11:21
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载