BufferedInputStreamとImageInputStream
転載してから BufferedInputStreamとImageInputStream
BufferedInputStreamで画像ファイルを読みましたが、画像のサイズは1 Mから200 Mの間にあります。写真が大きすぎて、どうすればいいか分かりません。ありがとうございます。兄と姉は弟に教えてくれました。今は1 M以下の画像しか読めませんが、1 Mから200 Mの大きな画像を読み込む必要があります。
以下は方法のコードです。
2.純java処理画像は大きなメモリしか開けられません。仮想マシンのメモリは1 Gまで開いて、java処理画像は全部メモリにあります。VolatileImageは現存を利用できると言われていますが、試した効果はまだbufferedmageに及ばないです。
もちろん一番いい方法はブロックに分けて読み取って、ブロックに分けて処理することです。これで1 Gの画像が一番怖いです。でも、アルゴリズムは複雑です。
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.jar2.純java処理画像は大きなメモリしか開けられません。仮想マシンのメモリは1 Gまで開いて、java処理画像は全部メモリにあります。VolatileImageは現存を利用できると言われていますが、試した効果はまだbufferedmageに及ばないです。
もちろん一番いい方法はブロックに分けて読み取って、ブロックに分けて処理することです。これで1 Gの画像が一番怖いです。でも、アルゴリズムは複雑です。