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;
有一个库你尝试用一下吧?thumbnailator-0.4.3.jar######+1######
纯java处理图片只能开大内存,吧虚拟机内存开到1G去,java处理图片全部都是在内存里的。有个VolatileImage据说可以利用显存,但是我曾经试过的效果还不如bufferedimage。
当然最好的办法就是分块读取、分块处理,这样最怕1G的图片也没有任何问题,不过算法就比较复杂了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。