이미지 처리 - Glide

k_hyun·2023년 3월 29일
0

서버에서 이미지를 내려받을 때 Glide를 이용하면 Volley나 Retrofit보다 더 쉽고 빠르게 개발할 수 있다.

Glide를 사용하려면 다음을 작성해야한다.

implementation 'com.github.bumptech.glide:glide:4.13.2'

이미지를 가져와 출력

load() 함수에 리소스를 전달하고, into()함수에 이미지 뷰 객체를 전달하면 리소스 이미지를 자동으로 가져와 출력한다.

// 리소스 이미지 출력
Glide.with(this)
	.load(R.drawable.seoul)
    .into(binding.resultView)
    
// 파일 이미지 출력    
val requestLauncher = registerForActivityResult(
	ActivityResultContracts.StartActivityForResult())
{
	Glide.with(this)
    	.load(it.data!!.data)
        .into(binding.resultView)
}
val intent = Intent(Intent.ACTION_PICK, MediaStroe.Images.Media.EXTERNAL_CONTENT_URI)
intent.type = "image/*"
requestLauncher.launch(intent)

// 서버 이미지 출력
Glide.with(this)
	.load(url)
    .into(binding.resultView)

Glide를 이용하면 특별히 처리하지 않아도 이미지 뷰에 애니메이션이 적용된 GIF 이미지를 출력할 수 있다.

크기 조절

Glide를 이용하면 코드에서 이미지 크기를 줄이지 않아도 이밎 뷰의 크기에 맞게 자동으로 줄여서 불러온다. 따라서 OOM 문제를 크게 신경 쓰지 않아도 된다.

특정한 크기로 이미지를 줄이고 싶다면 override() 함수를 사용한다.

// 크기 조절
Glide.with(this)
	.load(R.drawble.seoul)
    .override(200, 200)
    .into(binding.resultView)

로딩, 오류 이미지 출력

// 로딩, 오류 이미지 출력
Glide.with(this)
	.load(url)
    .override(200, 200)
    .placeholder(R.drawable.loading)
    .error(R.drawable.error)
    .into(binding.resultView)

이미지 데이터 사용하기

Glide.with(this)
	.load(url)
    .into(object : CustomTarget<Drawable> () {
    	override fun onResourceReady(
        	resource: Drawable,
            transition: Transition<in Drawable>?
        ) {
        
        }
        override fun onLoadCleared(placeholder: Drawable?) {
        
        }
    })

into() 함수에 이미지 데이터를 받을 객체를 지정했다.
이 객체는 CustomTarget을 상속받아 onResourceReady()와 onLoadCleared() 함수를 재정의해야 한다.
load() 함수에 명시한 이미지를 불러왔을 때 onResourceReady() 함수가 자동으로 호출되며, 매개변수로 이미지를 Drawable 타입으로 전달해 준다.

0개의 댓글