Android examples for Graphics:Bitmap Compress
compress Bitmap for various ways
//package com.java2s; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.math.RoundingMode; import java.nio.ByteBuffer; import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; import android.graphics.BitmapFactory.Options; import android.graphics.Matrix; public class Main { public final static Bitmap compressBitmap(String path, int rqsW, int rqsH) { final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(path, options); options.inSampleSize = caculateInSampleSize(options, rqsW, rqsH); options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(path, options); }//from w ww.jav a 2 s . c om @Deprecated public final static Bitmap compressBitmap(InputStream is, int reqsW, int reqsH, boolean isAdjust) { Bitmap bitmap = BitmapFactory.decodeStream(is); return compressBitmap(bitmap, reqsW, reqsH, isAdjust); } public final static Bitmap compressBitmap(InputStream is, int reqsW, int reqsH) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ReadableByteChannel channel = Channels.newChannel(is); ByteBuffer buffer = ByteBuffer.allocate(1024); while (channel.read(buffer) != -1) { buffer.flip(); while (buffer.hasRemaining()) baos.write(buffer.get()); buffer.clear(); } byte[] bts = baos.toByteArray(); Bitmap bitmap = compressBitmap(bts, reqsW, reqsH); is.close(); channel.close(); baos.close(); return bitmap; } catch (Exception e) { // TODO: handle exception e.printStackTrace(); return null; } } public final static Bitmap compressBitmap(byte[] bts, int reqsW, int reqsH) { final Options options = new Options(); options.inJustDecodeBounds = true; options.inPreferredConfig = Bitmap.Config.ARGB_8888;// optional options.inSampleSize = caculateInSampleSize(options, reqsW, reqsH); options.inJustDecodeBounds = false; return BitmapFactory.decodeByteArray(bts, 0, bts.length, options); } @Deprecated public final static Bitmap compressBitmap(Bitmap bitmap, int reqsW, int reqsH, boolean isAdjust) { if (bitmap == null || reqsW == 0 || reqsH == 0) return bitmap; if (bitmap.getWidth() > reqsW || bitmap.getHeight() > reqsH) { float scaleX = new BigDecimal(reqsW) .divide(new BigDecimal(bitmap.getWidth()), 4, RoundingMode.DOWN).floatValue(); float scaleY = new BigDecimal(reqsH).divide( new BigDecimal(bitmap.getHeight()), 4, RoundingMode.DOWN).floatValue(); if (isAdjust) { scaleX = scaleX < scaleY ? scaleX : scaleY; scaleY = scaleX; } Matrix matrix = new Matrix(); matrix.postScale(scaleX, scaleY); bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); } return bitmap; } public final static Bitmap compressBitmap(Bitmap bitmap, int reqsW, int reqsH) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.JPEG, 100, baos); byte[] bts = baos.toByteArray(); Bitmap res = compressBitmap(bts, reqsW, reqsH); baos.close(); return res; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return bitmap; } } @Deprecated public final static Bitmap compressBitmap(Resources res, int resID, int reqsW, int reqsH, boolean isAdjust) { Bitmap bitmap = BitmapFactory.decodeResource(res, resID); return compressBitmap(bitmap, reqsW, reqsH, isAdjust); } public final static Bitmap compressBitmap(Resources res, int resID, int reqsW, int reqsH) { final Options options = new Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeResource(res, resID, options); options.inSampleSize = caculateInSampleSize(options, reqsW, reqsH); options.inJustDecodeBounds = false; return BitmapFactory.decodeResource(res, resID, options); } public final static Bitmap compressBitmap(Bitmap bitmap, long maxBytes) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.JPEG, 100, baos); int options = 90; while (baos.toByteArray().length / 1024 > maxBytes) { baos.reset(); bitmap.compress(CompressFormat.JPEG, options, baos); options -= 10; if (options < 0) break; } byte[] bts = baos.toByteArray(); Bitmap bmp = BitmapFactory.decodeByteArray(bts, 0, bts.length); baos.close(); return bmp; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } /** * caculate the bitmap sampleSize * @param path * @return */ public final static int caculateInSampleSize( BitmapFactory.Options options, int rqsW, int rqsH) { final int height = options.outHeight; final int width = options.outWidth; int inSampleSize = 1; if (rqsW == 0 || rqsH == 0) return 1; if (height > rqsH || width > rqsW) { final int heightRatio = Math.round((float) height / (float) rqsH); final int widthRatio = Math.round((float) width / (float) rqsW); inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; } return inSampleSize; } }