일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 한달어스
- 끝말잇기
- 캐치마인드
- 한달브런치북만들기
- 북한살둘레길
- 프래그먼트
- 베드테이블
- 브런치작가되기
- 목적중심리더십
- 재택근무
- 베드트레이
- 면접
- 1일1커밋
- 아비투스
- 소프시스
- 한단어의힘
- 목적 중심 리더십
- 한달독서
- 함수형 프로그래밍
- 커스텀린트
- 안드로이드
- 슬기로운 온라인 게임
- 테트리스
- 좌식테이블
- 리얼하다
- 소프시스 밤부 좌식 엑슬 테이블
- T자형인재
- 지지않는다는말
- 어떻게 나답게 살 것인가
- 자취필수템
- Today
- Total
정상에서 IT를 외치다
[Android,GetImage] 카메라와 갤러리에서 이미지 가져오기 (크롭 기능 추가) 본문
안녕하세요. 블랙진입니다.!!
카메라와 갤러리에서 이미지 가져오기를 단계별로 포스팅을 진행하고 있습니다.
이전 포스팅에 이어 크롭 기능을 추가해 보겠습니다.
Chapter 4. 가져온 이미지 크롭하기
안드로이드 기기 내부에는 크롭 기능을 탑재하고 있습니다.
Intent intent = new Intent("com.android.camera.action.CROP");
인텐트를 통해 크롭을 사용하실 수 있습니다. 하지만! 일부 안드로이드 기기에서는 위 크롭 인텐트가 적용이 안되는 것을 확인할 수 있었습니다. ㅠㅜ
보다 많은 개발자분들에게 도움이 되기 위해, 저는 모든 기기에 적용 수 있는 크롭 라이브러리를 사용하여 포스팅을 진행하겠습니다.
혹시 탑재되어 있는 크롭을 사용하고 싶으신 분은 이 링크를 참고해서 작업해 주세요
1. App 단계의 build.gradle 에 Crop 라이브러리를 추가해 줍니다.
app/ build.gradle
//crop
implementation 'com.soundcloud.android:android-crop:1.0.1@aar'
2. AndroidManifest 에 CropImageActivity 를 추가해 줍니다.
AndroidManifest.xml
<!-- crop activity -->
<activity
android:name="com.soundcloud.android.crop.CropImageActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.NoActionBar" />
<application> .. </application> 사이에 추가해 줍니다.
3. onActivityResult 에서 크롭 로직을 추가해 줍니다.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) {
Toast.makeText(this, "취소 되었습니다.", Toast.LENGTH_SHORT).show();
if(tempFile != null) {
if (tempFile.exists()) {
if (tempFile.delete()) {
Log.e(TAG, tempFile.getAbsolutePath() + " 삭제 성공");
tempFile = null;
}
}
}
return;
}
switch (requestCode) {
case PICK_FROM_ALBUM: {
Uri photoUri = data.getData();
cropImage(photoUri);
break;
}
case PICK_FROM_CAMERA: {
Uri photoUri = Uri.fromFile(tempFile);
cropImage(photoUri);
break;
}
case Crop.REQUEST_CROP: {
setImage();
}
}
}
requestCode 에서 Crop.REQUEST_CROP 단계를 추가해 줍니다.
4. 카메라 및 갤러리에서 가져온 이미지를 Crop 화면으로 보내줍니다.
private void cropImage(Uri photoUri) {
Log.d(TAG, "tempFile : " + tempFile);
/**
* 갤러리에서 선택한 경우에는 tempFile 이 없으므로 새로 생성해줍니다.
*/
if(tempFile == null) {
try {
tempFile = createImageFile();
} catch (IOException e) {
Toast.makeText(this, "이미지 처리 오류! 다시 시도해주세요.", Toast.LENGTH_SHORT).show();
finish();
e.printStackTrace();
}
}
//크롭 후 저장할 Uri
Uri savingUri = Uri.fromFile(tempFile);
Crop.of(photoUri, savingUri).asSquare().start(this);
}
사진촬영의 경우에는 tempFile 이 생성되어 있어 크롭된 이미지를 tempFile 에 넣어 저장할 수 있습니다. 하지만 갤러리에서 가져온 이미지는 크롭 후의 이미지를 저장할 파일이 없기 때문에 tempFile = createImageFIle() 을 추가로 작성해 주어야 합니다.
5. Crop 된 이미지 받기
case Crop.REQUEST_CROP: {
setImage();
}
크롭 후에는 onActivityResult 에서 Crop.REQUEST_CROP를 수행하게 됩니다. 우리는 위 4번에서 tempFile 에 크롭한 이미지를 이미 저장 했기 때문에 별다른 로직 없이 tempFile 를 크롭한 이미지라 생각하고 사용하시면 됩니다.
case Crop.REQUEST_CROP: {
File cropFile = new File(Crop.getOutput(data).getPath());
}
참고로 Crop.REQUEST_CROP 에서 크롭한 파일을 가져오는 방법은 위와 같습니다.
자! 이렇게 카메라와 갤러이에서 이미지 가져오기 포스팅을 모두 끝냈습니다. 따라오시면서 어려운 점이나 이해 안가는부분은 댓글로 질문 부탁드리겠습니다. 혹은 코드에서 잘못된 점이 있거나 더 좋은 방식이 있다면 얼마든지 댓글 달아 주시면 감사하겠습니다.
제 나름대로 안드로이드 OS 와 기기 별 모두 호환될 수 있게 작성을 해봤습니다. 많은 개발자 분들에게 도움이 되었으면 좋겠습니다. :)
관련 포스팅
4. 가져온 이미지 크롭(Crop) 하기
'안드로이드' 카테고리의 다른 글
[Android, Koin] 코인을 사용한 의존성 주입 기본 예제 (4) | 2018.12.05 |
---|---|
[Android Architecture Component] 라이프 사이클 (0) | 2018.11.27 |
[Android,GetImage] 카메라와 갤러리에서 이미지 가져오기 (카메라 회전각도 적용) (6) | 2018.10.23 |
[Android,GetImage] 카메라와 갤러리에서 이미지 가져오기 (Nougat 대응) (6) | 2018.10.23 |
[Android,GetImage] 카메라와 갤러리에서 이미지 가져오기 (26) | 2018.10.23 |