일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- appbarlayout
- apache
- IMAGE
- Android
- embedd
- Objective C
- JavaScript Engine
- apk 다운사이징
- android log dump
- apns
- Push
- Magnify Anim
- java
- IOS10
- 안드로이드
- ios framework
- Status Bar
- so file
- 공인인증서 만료일
- Android NDK시스템
- 공인인증서 정보
- V8 Engine
- PageControl
- FlexiblePageView
- 인증서 정보 뽑아내기
- ios
- SO 파일
- Google V8 Engine
- sha1 convert hashkey
- v8 engine xcode build
- Today
- Total
caTea 블로그
image quality down 본문
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;
}
}
'android' 카테고리의 다른 글
android file upload and spring(image..) (1) | 2015.08.05 |
---|---|
android file path (0) | 2015.08.05 |
SwipeMenuListView 서브 메뉴 클릭시 서브메뉴가 닫히지 않는현상 (0) | 2015.07.01 |
status bar 컬러를 library 를 이용해서 바꿔보자 (4.4이상) (0) | 2015.06.30 |
안드로이드 멕티비티 애니매이션 효과 적용 (0) | 2015.06.25 |