본문 바로가기

IT/Android

안드로이드 / image crop 라이브러리 사용

반응형

Android Image Cropper 

Android Image Cropper는 쉽게 이미지를 크롭하는 라이브러리이다.

 

https://github.com/CanHub/Android-Image-Cropper

 

GitHub - CanHub/Android-Image-Cropper: Image Cropping Library for Android, optimised for Camera / Gallery.

Image Cropping Library for Android, optimised for Camera / Gallery. - GitHub - CanHub/Android-Image-Cropper: Image Cropping Library for Android, optimised for Camera / Gallery.

github.com

원하는 기능

프로필 이미지를 등록하고싶은데,  사용자가 이미지의 원하는 부분만 크롭해서 저장하게 하고 싶었다.

 


이미지를 선택하는 기능은 아래 링크에서 확인할 수 있다.

https://dev-ej2.tistory.com/80

 

안드로이드 / android 13 photo picker 사용방법

기존에 사용하던 Image picker가 동작을 하지 않아 ㅠㅠ android13부터 등장한 photo picker를 적용해 봤습니다. 이렇게 ui까지 제공해주는 갤러리내 photo picker입니다. 바텀시트로 되어있어 간편해요! // bui

dev-ej2.tistory.com

이제 이미지를 선택했으니, 선택한 이미지의 uri를 가지고 crop을 해야한다.

 

사전 준비

1. 먼저 해당 라이브러리를 사용 할 수 있도록 app 수준 gradle에 추가를 해줍니다.

// image crop
implementation("com.vanniktech:android-image-cropper:4.5.0")

 

2. manifest에 theme를 적용한 activity를 추가한다.

<activity
  android:name="com.canhub.cropper.CropImageActivity"
  android:theme="@style/Base.Theme.AppCompat"
/>

 

이렇게 하면 라이브러리를 사용하기 위한 사전 준비가 끝난다.

 

라이브러리 사용

1. registerForAcitivityResult를 이용하여 크롭 결과를 콜백 받을 수 있다.

private val cropImage = registerForActivityResult(CropImageContract()) { result ->
    if (result.isSuccessful) {
        // returned uri 사용
        val uriContent = result.uriContent
        val uriFilePath = result.getUriFilePath(requireContext()) // optional usage
    } else {
        // An error occurred.
        val exception = result.error
    }
}

 

2. cropping acitivity를 시작하는 코드이다.

// cropping activity 시작
cropImage.launch(CropImageContractOptions(
    uri = uri, // 크롭할 이미지 uri
    cropImageOptions = CropImageOptions(
    	outputCompressFormat = Bitmap.CompressFormat.PNG
        // 원하는 옵션 추가
    )
))

 

guideline을 제거한다던가 높이, 너비 maxSize를 정하는 등 다양한 옵션을 CropImageOptions에 추가할 수 있다.

output이 jpeg가 디폴트라, png로 옵션을 설정한 예제이다.

 

결과는?

다음과 같이 적용이 된다. 크롭한 이미지는 uri를 받아 자유롭게 사용이 가능해서 편리하다.