안드로이드API)[Kotlin] Image Crop라이브러리 사용하기
이번 예제에 사용할 라이브러리는 아래 주소에서 볼 수 있다.
https://github.com/ArthurHub/Android-Image-Cropper
ArthurHub/Android-Image-Cropper
Image Cropping Library for Android, optimized for Camera / Gallery. - ArthurHub/Android-Image-Cropper
github.com
이미지의 크롭을 위해서는 먼저 app경로의 gradle파일에 아래와 같은 코드를 추가해준다.
dependencies {
...
api 'com.theartofdev.edmodo:android-image-cropper:2.8.+'
...
}
또한 파일의 읽고쓰기를위해 안드로이드 Manifests파일에 아래와 같은 퍼미션 코드를 추가해준다.
다음으로는 proguard-rules.pro파일에 아래 코드를 추가해주고
-keep class androidx.appcompat.widget.** { *; }
Manifests파일에 우리가 코드를 작성할 액티비티 이외에 아래와같은 액티비티를 추가해준다.
자 이제 밑준비가 끝났으니 우리의 코드를 차례이다.
먼저 XML파일 먼저 작성을 한다, 나는 MainActivty대신 CropperActivity라고 이름을 지었다.
<CropperActivity.xml>
위처럼 단순히 라이브러리에서 지정해주는 크롭이미지뷰를 추가하는게 다이다.
마지막으로 CropperActivity.kt를 작성해주어야 할 차례인데 여기서
// 이미지 크롭을 위한 가이드를 열어주어 크롭할 이미지를 받아올 수 있게한다.
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.start(this);
// 이미지의 uri를 받아서 해당하는 이미지를 크롭한다.
CropImage.activity(imageUri)
.start(this);
// 프레그먼트사용시에 쓰는 코드
CropImage.activity()
.start(getContext(), this);
위와같은 세가지 방법이 존재하는데 자바와 코틀린의 코드를 똑같이쓸수있음.(세미콜론 유무차이)
첫번째 방법을 사용하면
위사진처럼 카메라로 찍어서 가져올지 앨범에서 선택할지를 고를 수 있다.
앨범에서 사진을 선택해 크롭버튼을 누르면 onActivityResult에
requestCode : CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE
resultCode : Activity.RESULT_OK
위와같이 결과가 도출되며
val result = CropImage.getActivityResult(data)
val resultUri: Uri = result.uri
위와같은 코드로 크롭한 이미지의 uri를 얻어올 수 있다.
/*
주의할점은 이 uri는 /storage 이렇게 시작하는 외부주소가 아니라 /data로 시작하는 내부주소임으로 파일 업로드나 공유를 원한다면 수정과정을 거쳐야 한다.
*/
cropImageView.setImageUriAsync(uri);
마지막으로 xml파일에 만들어둔 뷰에 적용을 할 수 있다.