본문 바로가기

안드로이드

[Android Studio] 사진 가져오기, 사진 찍은 후 Crop 하기 1편 ! (Kotlin)

728x90

 

오늘은 Android Studio 사진 가져오기, 사진 찍은 후 Crop 기능을 

라이브러리 사용하지 않고 설정하는 법에 대해 포스팅 하겠습니다. 

 

 

1. Manifests 추가 (Manifests 를 추가했으면 당연히 permission 확인 후 검사 로직 추가해주는 것은 기본 입니다.)

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

 

 

2. 권한 검사 후 허용 로직 추가 (이 부분은 넘어가겠습니다!)

 

MainActivity (버튼 두개와 이미지 한개를 만들었다고 설정하겠습니다.)

1.  갤러리에서 사진 가져온 후 크롭기능 

 

1-1. 버튼리스너 설정.

override fun onBindView() = with(binding) {
    tvChoiceAlbum.setOnClickListener {
        openGalleryForImage()
    }
}

 

1-2 갤러리 함수 설정

private fun openGalleryForImage() {
    Intent(Intent.ACTION_PICK).apply {
        putExtra("crop", true)
        type = MediaStore.Images.Media.CONTENT_TYPE
        choiceAlbumLauncher.launch(this)
    }

}

 

1-3 launcher 설정

private val choiceAlbumLauncher =
    registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
        it.data?.let { data ->
            data.data?.let { dataUri ->
              Glide.with(binding.Img)
                .load(it)
                .transform(CircleCrop())
                .into(binding.Img)
            }
        }
    }

 

이렇게 갤러리에서 크롭 기능을 사용할 경우에는 Intent 쪽에 intent.putExtra("crop", true) 를 설정해주시면 됩니다. 

 

보너스로 서버로 이미지 파일을 보내야 될 경우에는 절대경로가 필요한데 절대경로를 알 수 있는 코드는 아래와 같습니다.

 

  val cursor = requireActivity().contentResolver.query(
                    dataUri,
                    null,
                    null,
                    null,
                    null
                )
            cursor?.let { cu ->
                cu.moveToFirst()
                val columnIndex = cu.getColumnIndex(MediaStore.Images.Media.DATA)
                val mediaPath = cu.getString(columnIndex)
                cu.close()

                val file = File(mediaPath)
            }

 

 

 

사진찍은 후 Crop 설정하는 것은 다음 포스팅에서 계속하겠습니다.