android画像圧縮
2316 ワード
//
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
//
Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/dcim/Camera/hello.jpg",options);// bm
options.inJustDecodeBounds =false;
//
int be = (int)(options.outHeight / (float)200);
if(be <= 0)
be =1;
options.inSampleSize =be;
// , options.inJustDecodeBounds false
bitmap = BitmapFactory.decodeFile("/sdcard/dcim/Camera/hello.jpg",options);
int w = bitmap.getWidth();
int h=bitmap.getHeight();
System.out.println(w+" "+h);
myImageView.setImageBitmap(bitmap);
// sdCard
File file2= new File("/sdcard/dcim/Camera/test.jpg");
try {
FileOutputStream out = new FileOutputStream(file2);
if(bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out)){
out.flush();
out.close();
}
} catch (Exception e) {
// TODO: handle exception
}
// sd
File file =new File("/sdcard/dcim/Camera/test.jpg");
int maxBufferSize = 16 * 1024;
int len = 0;
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
BufferedInputStream bufferedInputStream;
try {
bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
int bytesAvailable = bufferedInputStream.available();
int bufferSize = Math.min(bytesAvailable, maxBufferSize);
byte[] buffer = new byte[bufferSize];
while ((len = bufferedInputStream.read(buffer)) != -1)
{
outStream.write(buffer, 0, bufferSize);
}
data = outStream.toByteArray();
outStream.close();
bufferedInputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
最近プロジェクトをして、1つの問題にぶつかって、1つの大きいファイルをアップロードして、メモリがあふれて、私は画像を圧縮してアップロードするしかありません. これにより、メモリがオーバーフローすることなく、大きな画像を読み取ることができます.