아이폰 개발에서 PNG나 JPG를 언제 사용할 것인가요?
슬라이드쇼에 여러 이미지를 보여주는 앱이 있습니다.이 이미지들은 번들의 일부가 되어 앱과 함께 배포됩니다.
모든 이미지는 사진 또는 사진 등입니다.
이미지 포맷으로 PNG를 사용하는 것이 선호된다고 읽었는데, JPG 버전이 훨씬 작아지는 것을 보니 차라리 그것을 사용하고 싶습니다.
어떤 형식으로 어떤 경우에 사용할 것인지에 대한 지침이 있습니까?
PNG는 픽셀이 완벽하며(손실이 없는) 표시에 CPU 에너지가 거의 필요하지 않습니다.그러나 대용량 PNG는 압축된 이미지 형식보다 스토리지에서 읽는 시간이 더 오래 걸리므로 표시 속도가 더 느릴 수 있습니다.
JPG는 저장하기에는 크기가 작지만 손실(양은 압축 수준에 따라 다름)이 있으며 표시하려면 훨씬 더 복잡한 디코딩 알고리즘이 필요합니다.하지만 일반적인 압축과 화질은 보통 사진을 찍기에 충분합니다.
사진 및 큰 것에는 JPG를 사용하고, 작은 것 및/또는 "픽셀 퍼펙트"(예: 작은 아이콘)로 표시되거나 합성된 투명 오버레이의 일부로 설계된 것에는 PNG를 사용합니다.
애플은 아이폰 앱 번들에 포함된 PNG 이미지를 최적화합니다.사실 아이폰은 하드웨어에 최적화된 색상 바이트를 사용하는 특수 인코딩을 사용합니다.XCode는 프로젝트를 작성할 때 이 특수 인코딩을 대신 처리합니다.따라서 크기를 고려한 것 외에 아이폰에서 PNG를 사용하면 추가적인 이점을 얻을 수 있습니다.이러한 이유로 인터페이스의 일부로 표시되는 모든 영상(표 보기, 레이블 등)에는 PNG를 사용하는 것이 좋습니다.
사진과 같은 전체 화면 이미지를 표시하는 경우 손실이 없고 이미지를 디코딩할 때 리소스 사용은 말할 것도 없고 JPG보다 화질이 더 좋아야 하므로 PNG로 여전히 이점을 얻을 수 있습니다.파일 크기의 실질적인 이점을 보려면 JPG의 품질을 줄여야 할 수도 있지만 최적이 아닌 이미지를 표시하게 됩니다.
파일 크기도 분명 요인이지만 이미지 형식을 선택할 때도 다른 고려 사항이 있습니다.
PNG와 함께 생각해야 할 한 가지 중요한 것이 있습니다.만약 당신의 Xcode 빌드에 PNG가 포함되어 있다면 그것은 iOS에 최적화 될 것입니다.이것을 PNG 크러쉬라고 부릅니다.실행 시간에 PNG를 다운로드하면 PNG가 깨지지 않습니다.파쇄된 PNG는 100% JPG와 거의 같습니다.품질이 낮은 JPG가 품질이 높은 JPG보다 더 잘 실행됩니다.따라서 성능 측면에서 가장 빠른 속도에서 느린 속도로 저품질의 JPG, 고품질의 JPG, PNG Crushed, PNG가 됩니다.
PNG를 다운로드해야 한다면 다운로드 전에 서버에서 PNG를 파쇄하는 것을 고려해야 합니다.
http://www.cocoanetics.com/2011/10/avoiding-image-decompression-sickness/
Cocoanetics 블로그는 다양한 품질 수준의 JPG와 PNG의 우수한 iOS 성능 벤치마크를 공개했습니다.
그의 결론에서:
알파 채널이 꼭 필요하거나 PNG를 사용해야 한다면 웹 서버에 pngcrush 도구를 설치하고 모든 PNG를 처리하도록 하는 것이 좋습니다.다른 거의 모든 경우에서 고품질 JPEG는 더 작은 파일 크기(즉, 더 빠른 전송)와 더 빠른 압축 및 렌더링을 결합합니다.
PNG는 UI 요소에 사용하는 작은 이미지에는 적합하지만 카탈로그나 잡지와 같은 전체 화면 응용 프로그램에는 적합하지 않은 것으로 나타났습니다.여기서 소스 재료에 따라 압축 품질을 60%에서 80% 사이에서 선택할 수 있습니다.
파일의 캐시된 압축되지 않은 버전이 있기 때문에 한 번 그린 UIImage 인스턴스에 모든 것을 표시할 수 있습니다.큰 이미지가 화면에 표시되도록 시각적으로 일시 중지하지 않는 경우에는 미리 몇 개의 이미지에 대해 압축을 해제해야 합니다.그러나 이러한 작업은 많은 양의 RAM을 필요로 하며, 너무 많이 하면 앱이 종료될 수 있습니다.NSCache는 RAM이 부족해지면 이미지를 자동으로 제거하기 때문에 자주 사용하는 이미지를 배치하기에 매우 적합합니다.
이미지에 압축을 풀 필요가 있는지 없는지 여부를 알 수 있는 방법이 없다는 것은 유감스러운 일입니다.또한 이미지가 압축되지 않은 버전을 삭제할 수도 있습니다.애플의 버그 보고 사이트에서 제기할 수 있는 좋은 레이더가 될 수도 있습니다.하지만 다행히 위와 같이 이미지에 접근하는 것은 이미 압축이 풀린 상태라면 시간이 걸리지 않습니다.그래서 당신은 "때맞춰"뿐만 아니라 "때맞춰" 그렇게 할 수 있습니다.
압축 해제 성능 데이터를 좀 공유하려고 했는데...
저는 360도 뷰어 시제품을 만들고 있습니다. 사용자가 여러 각도에서 찍은 일련의 사진을 회전시켜 물체를 부드럽게 회전시킬 수 있는 느낌을 주는 회전목마입니다.
NSData 배열에 이미지 데이터를 로드하여 방정식에서 파일 i/o를 제거했지만 NSImage 배열을 즉시 생성했습니다.거의 최대 프레임 속도(~25fps)로 테스트하고 인스트루먼트에서 보는 것을 보면 앱이 분명히 CPU 바인딩되어 있으며 ~275kb png 대 ~75kb jpg를 나타내는 CPU 로드가 약 10% 증가했습니다.
확실하게 말할 수는 없지만 제 추측으로는 CPU 제한은 단지 일반적인 프로그램 실행과 메모리의 모든 데이터 이동에 의한 것이지만, 그 이미지 압축 해제는 GPU에서 이루어진다는 것입니다. 어느 쪽이든 그리고 JPG 대 PNG 성능 논쟁은 JPG를 선호하는 것처럼 보입니다.특히 파일 크기가 더 작은 경우(따라서 적어도 체인의 일부 부분에서 메모리에 있는 개체의 크기가 더 작은 경우) 고려됩니다.
물론 모든 상황이 다르겠지만 테스트를 대체할 수 있는 건...
저는 jpegs vs png를 사용할 때 애니메이션 성능의 큰 차이를 발견했습니다.예를 들어 화면 크기의 jpeg 3개를 UIScrollView에 나란히 놓고 iPhone4에서 가로로 스크롤하면 시차가 발생하고 완전히 불쾌한 육포 애니메이션이 발생합니다.동일한 치수의 투명하지 않은 png를 사용하면 스크롤이 매끄럽습니다.저는 이미지가 커도 jpeg를 절대 사용하지 않습니다.
투명하게 사용하고 싶다면 PNG 외에는 선택의 여지가 없다고 생각합니다. 하지만 이미 배경이 불투명하다면 JPG를 사용해도 좋습니다.그것만이 제가 볼 수 있는 유일한 차이입니다.
'사진용 JPEG 사용' 섹션의 휴먼 인터페이스 가이드라인에 언급된 대로 해당 형식의 작품을 제작합니다.
언급URL : https://stackoverflow.com/questions/3929281/when-to-use-png-or-jpg-in-iphone-development
'programing' 카테고리의 다른 글
사용자 지정 패키지에 대한 Composer 설치 경로 (0) | 2023.10.05 |
---|---|
Spark SQL: 열 목록에 Aggregate 함수 적용 (0) | 2023.10.05 |
코드를 정리하는 가장 좋은 명령줄 도구는 무엇입니까? (0) | 2023.10.05 |
프로그래밍 방식으로 배송 방법 설정 우커머스 (0) | 2023.10.05 |
서비스에서 구성 요소 보기 업데이트 트리거 - ChangeDetectorRef에 대한 공급자 없음 (0) | 2023.10.05 |