
React Native 0.57.x <Image/>: 대용량 이미지의 품질 문제 해결하기
React Native 0.57.x를 사용할 때 대용량 이미지의 품질이 낮아지는 문제가 발생하고 있나요? 특히 안드로이드 기기와 시뮬레이터에서만 이 문제가 발생하나요? 혼자가 아닙니다. 많은 개발자들이 같은 문제를 보고했으며, 이 문제는 React Native 0.57.x로 업그레이드한 후에 발생하는 것으로 보입니다.
문제:
안드로이드 기기와 에뮬레이터에서 대용량 번들 이미지를 로드할 때, resizeMethod="resize" 속성을 사용하더라도 이미지의 품질이 현저히 저하되는 문제가 발생합니다. 이 문제는 iOS 시뮬레이터나 기기에서는 관찰되지 않습니다. 비교를 위해 아래의 스크린샷을 확인해보세요.
React Native 0.56.0

React Native 0.57.5

“RN057ImageTest”와 “RN056ImageTest”라는 프로젝트는 모두 react-native init 명령어로 새롭게 설치되었습니다. 이미지를 표시하기 위해 사용된 코드는 <Image source={require('./assets/ELHall1.png')} resizeMethod="resize" />이며, 이미지 파일의 크기는 2111 x 4645 픽셀입니다.
가능한 해결책:
React Native 0.57.x로 업그레이드하면 번들러가 이미지 자산을 처리하는 방식에 영향을 미쳤습니다. “scale” 또는 “resize” 값을 resizeMethod 속성에 사용하여도 차이가 없으며, 이미지 포맷을 (PNG8, PNG24, PNG32) 조정해도 개선되지 않습니다.
가능한 해결책 중 하나는 내장된 Image 컴포넌트 대신 FastImage 라이브러리를 사용하는 것입니다. FastImage는 대용량 이미지에도 품질을 유지하며 더 나은 이미지 품질을 제공합니다. 다음은 예시입니다:
import FastImage from 'react-native-fast-image';
// 컴포넌트 내부에서
<FastImage source={require('./assets/ELHall1.png')} style={{ height: '100%', aspectRatio: 2.5 }} />
이 대안을 고려하기 전에 react-native-fast-image 라이브러리를 설치하십시오.
업데이트 1:
React Native 저장소에는 이 문제와 관련한 GitHub 이슈가 9월에 등록되었으나, 아직 응답이 없었습니다. 따라서 이는 React Native 자체의 문제가 아닌 사용되고 있는 이미지 처리 라이브러리인 Fresco의 문제일 가능성을 인정하는 것이 중요합니다.
업데이트 2:
추가 조사 결과, 이 문제는 React Native에 직접적으로 관련된 것이 아니라 Fresco와 관련이 있다는 것을 알게 되었습니다. @clytras가 제안한 해결책은 DecodeProducer.java 파일 내에서 다운샘플 코드를 제거하거나 주석 처리하는 것입니다.
이 해결책을 구현하기 위해 Fresco 저장소를 복제하고 소스 코드를 수정하며, 소스에서 Fresco를 컴파일해야 합니다. 자세한 설명과 필요한 코드 수정 내용은 @clytras가 제공한 GitHub 저장소에서 확인할 수 있습니다: https://github.com/clytras/RN061FrescoBuild.
업데이트 3:
Fresco를 소스에서 컴파일하는 작업이 번거로워 보인다면, @clytras가 제공한 @lytrax/react-native-fresco 템플릿을 사용하는 것도 한 가지 선택지입니다. 이 템플릿은 RN 0.61.5로 새로운 React Native 프로젝트를 설정하고, 프로젝트를 빌드하기 위해 필요한 모든 변경 사항을 포함하고 있습니다. 또한 Android NDK Revision 21을 사용합니다. 이 템플릿과 설치 지침에 대한 자세한 내용은 다음 GitHub 저장소에서 확인할 수 있습니다: https://github.com/clytras/react-native-fresco.
결론:
React Native는 크로스 플랫폼 모바일 애플리케이션을 개발하기 위한 훌륭한 기능을 제공하지만, 새 버전으로 업그레이드한 후에 발생할 수 있는 잠재적인 문제에 대해 인지하는 것이 중요합니다. React Native 0.57.x의 경우, 안드로이드 기기에서 대용량 이미지의 품질이 저하될 수 있습니다. 다행히도 FastImage와 Fresco 라이브러리의 수정으로 이 문제를 해결할 수 있습니다.
항상 최신 동향에 대해 업데이트하고 React Native 애플리케이션의 최상의 사용자 경험을 위해 문제를 해결하기 위해 적극적으로 노력해야 합니다.
참고 자료 :
https://stackoverflow.com/questions/53402308/react-native-0-57-x-image-large-images-low-quality
같은 카테고리의 다른 글 보기 :