caTea 블로그

image quality down 본문

android

image quality down

ZaRas 2015. 8. 5. 11:53
반응형

private final int PHOTO_SIZE_LIMIT = (64 * 1024);



private byte[] settingPhoto(String path){

byte[] returnVal = null;

try{

ExifInterface exif;

int orientation = 0;

exif = new ExifInterface(path);

orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);


BitmapFactory.Options options = new BitmapFactory.Options();

File f = new File(path);

long f_size = f.length();

//코드 정리의 필요성이 있는 부분이다.. 이미지의 사이즈 별로 샘플 사이즈를 조절한다.. 일단 1M 이상이라면 1/4로 줄이자..

if(f_size > (1024*1024)){

options.inSampleSize = 4;

}

Bitmap bitmap = Utility.rotateBitmap(BitmapFactory.decodeFile(path, options), orientation);

ByteArrayOutputStream out = null;

int quality = 100;

while(true){

out = new ByteArrayOutputStream();

bitmap.compress(Bitmap.CompressFormat.JPEG, quality, out);

returnVal = out.toByteArray();

out.flush();

out.close();

if(returnVal.length <= PHOTO_SIZE_LIMIT ){

break;

}

else if(quality == 30){ //퀄리티를 30% 아래까지 떨어뜨리면 의미가 없지 않나 싶어 넣어둔 코드.. 정책이 정해지면 처리하자..

break;

}

else{

quality = quality - 5;

}

}

bitmap = Utility.rotateBitmap(BitmapFactory.decodeByteArray(returnVal, 0, returnVal.length), orientation);

returnVal = out.toByteArray();

bitmap.recycle();

}

catch(Exception e){

Log.e(TAG, "settingPhoto Exception.. e = " + e.toString());

}

return returnVal;

}







public static Bitmap rotateBitmap(Bitmap bitmap, int orientation) {

    try{

        Matrix matrix = new Matrix();

        switch (orientation) {

            case ExifInterface.ORIENTATION_NORMAL:

                return bitmap;

            case ExifInterface.ORIENTATION_FLIP_HORIZONTAL:

                matrix.setScale(-1, 1);

                break;

            case ExifInterface.ORIENTATION_ROTATE_180:

                matrix.setRotate(180);

                break;

            case ExifInterface.ORIENTATION_FLIP_VERTICAL:

                matrix.setRotate(180);

                matrix.postScale(-1, 1);

                break;

            case ExifInterface.ORIENTATION_TRANSPOSE:

                matrix.setRotate(90);

                matrix.postScale(-1, 1);

                break;

          case ExifInterface.ORIENTATION_ROTATE_90:

              matrix.setRotate(90);

              break;

          case ExifInterface.ORIENTATION_TRANSVERSE:

              matrix.setRotate(-90);

              matrix.postScale(-1, 1);

              break;

          case ExifInterface.ORIENTATION_ROTATE_270:

              matrix.setRotate(-90);

              break;

          default:

              return bitmap;

        }

       

            Bitmap bmRotated = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);

            bitmap.recycle();

            return bmRotated;

    }

        catch (OutOfMemoryError e) {

            e.printStackTrace();

            return null;

        }

    catch (Exception e) {

        e.printStackTrace();

        return null;

    }

}

728x90