차근차근/Android

카메라 크롭 기능 (Camera Crop)

예쁜꽃이피었으면 2015. 1. 6. 13:15

http://myluckydays.tistory.com/134


카메라나 갤러리로부터 이미지를 가져와서 Crop 하여 Crop된 이미지를 저장하는 코드이다. 

다음 주소들을 참고하였다. (사실 거의 배낀 수준.. 설명이 아주 잘 나와있다.)


http://theeye.pe.kr/entry/example-of-image-crop-with-camera-and-album-picker-on-android

http://blog.naver.com/PostView.nhn?blogId=legendx&logNo=40132435162


- 갤러리에서 이미지 가져오는 부분

private void getPhotoFromGallery() { // 갤러리에서 이미지 가져오기 

Intent intent = new Intent(Intent.ACTION_PICK);

intent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);

startActivityForResult(intent, PICK_FROM_GALLERY);

}



- 카메라 촬영 후 이미지 가져오는 부분

private void getPhotoFromCamera() { // 카메라 촬영 후 이미지 가져오기

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);


// 임시로 사용할 파일의 경로를 생성

String url = "tmp_" + String.valueOf(System.currentTimeMillis()) + ".jpg";

mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), url));

intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUTmImageCaptureUri);

startActivityForResult(intent, PICK_FROM_CAMERA);

}



- onActivityResult() 에서 requestCode 별로 동작하도록 함

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

  

if (resultCode != RESULT_OK)

return;

switch (requestCode) {

case PICK_FROM_GALLERY: 

{

mImageCaptureUri = data.getData();

Log.i("NR"mImageCaptureUri.getPath().toString());


// 이후의 처리가 카메라 부분과 같아 break 없이 진행

}

case PICK_FROM_CAMERA:

{

Intent intent = new Intent("com.android.camera.action.CROP");

intent.setDataAndType(mImageCaptureUri"image/*");


// crop한 이미지를 저장할때 200x200 크기로 저장

intent.putExtra("outputX", 200); // crop한 이미지의 x축 크기

intent.putExtra("outputY", 200); // crop한 이미지의 y축 크기

intent.putExtra("aspectX", 2); // crop 박스의 x축 비율 

intent.putExtra("aspectY", 1); // crop 박스의 y축 비율

            intent.putExtra("scale"true);

intent.putExtra("return-data"true);

            startActivityForResult(intent, CROP_FROM_CAMERA);


break;

}

case CROP_FROM_CAMERA

{

final Bundle extras = data.getExtras();

// crop된 이미지를 저장하기 위한 파일 경로

String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/temp/" + System.currentTimeMillis() + ".jpg";


if (extras != null) {

Bitmap photo = extras.getParcelable("data"); // crop된 bitmap 

storeCropImage(photo, filePath);

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); // 갤러리를 갱신하기 위해..


...

}


File file = new File(mImageCaptureUri.getPath());

if (file.exists()) {

file.delete();

}

}

}



- Bitmap을 SD 카드에 저장하는 부분

private void storeCropImage(Bitmap bitmap, String filePath) {

File copyFile = new File(filePath);

BufferedOutputStream out = null;


try {

copyFile.createNewFile();

out = new BufferedOutputStream(new FileOutputStream(copyFile));

bitmap.compress(CompressFormat.JPEG, 100, out);

out.flush();

out.close();

catch (Exception e) {         

e.printStackTrace();

}

}


반응형