Instagram의 압축 품질 살펴보기

Android 용 Instagram 응용 프로그램은 오늘날 세계에서 가장 인기있는 소셜 미디어 플랫폼 중 하나가되었습니다. 모든 플랫폼에서 월 3 억 명이 넘는 사용자와 Google Playstore에서 1 억 명이 넘는 개별 다운로드를 통해 Facebook의 스냅 샷 공유 응용 프로그램은 디자인과 기능면에서 품질이 뛰어납니다. 불행하게도, 사용자 기반의 큰 부분, 즉 안드로이드 인스 타 그램 (Instagrammer)은 인스 타 그램이해야 할 유일한 일, 즉 예쁜 사진을 공유하는 데 실패했습니다.

iOS 사용자는 자신의 창작물과 순간을 고화질로 공유 할 수 있지만, Android 사용자는 몇 년 동안 사진에서 극도로 품질 손실을보고 해 왔습니다. 그러한 두통에 대해 불평하는 가장 오래된 스레드 중 하나가 2012 년 9 월 여기에서 발견되었으며 스레드가 지금까지 실행되어 독자에게 Instagram의 어리석은 사진 파괴를 시도하고 해결할 수있는 정통 방법을 제공합니다. 2 년간의 불만, 소프트웨어 및 하드웨어의 기술 개선, 경제 및 시장 성장 후 Instagram이 이러한 문제를 해결했다고 생각할 것입니다. 그들이 비난해야 할 것인가? 아니면 문제의 근본 원인이 생각보다 깊게 실행됩니까?

직접 봐

기발한

1 : 1 자르기

여기 내가 찍은 사진이 있습니다. 원본 샷의 무게는 4.34MB 이며 9.6MP 로 촬영되었습니다. 나중에 고해상도의 파일을 인스 타 그램의 기본 640 × 640 픽셀 출력으로 다운 스케일링하여 고해상도 파일의 디테일을 이해할 수있는 "Instacrop"다운 샘플링을 설명하지 않기 위해 인스 타 그램의 1 : 1 종횡비의 JPG로 자릅니다. 후 처리 알고리즘의 직접적인 영향과이 파일에 대한 압축을 확인하기 위해 업로드합니다.

필자는 제곱 JPG 자르기를 잡고 필터, 효과를 추가하거나 값을 조정하지 않고 Instagram에 게시했습니다. 이미지가 원래 보여지는 것과 다소 비슷하게 보일 것으로 예상되지만 그 결과는 압도적이었습니다. 경계 주변의 압축 아티팩트와 색상 그라디언트는 훈련되지 않은 눈에도 놀라 울 정도로 눈에.니다. 원본 1 : 1 자르기 파일의 크기는 1.6MB 였지만 새 크기 조정 및 압축 된 이미지는 125KB 입니다. 이는 압축으로 원본의 파일 크기가 거의 13 배 줄 었음을 의미합니다. 이는 일부 상황에서 반드시 나쁘지는 않습니다.

흥미롭게도 Instagram은 기본적으로 꺼져있는 "고품질 이미지 처리"를 제공하지만, 설정하면 결과가 실제로 향상되지 않으며 압축 파일은 129KB에 있습니다. 여기서는 동일한 자르기를 제공하며 압축 압축이 여전히 강렬하고 이미지의 충실도가 여전히 거칠고 픽셀 화 된 손실을 특징으로한다는 것을 알 수 있습니다.

압축 w / 고품질 처리 끄기

고품질 처리를 통한 압축 ON

압축

컴퓨터 알고리즘은 다양한 기법을 사용하여 이미지 크기를 줄이는 다양한 방법을 제공합니다.

나중에 해석하고 적절한 그림을 적절한 방식으로 표시하는 데 필요한 데이터. 이미지의 많은 파일 유형은 지원하거나 지원하지 않는 이러한 압축 기술과 밀접하게 연관되어 있습니다. 따라서 일반적으로 일부 유형의 사진에서 다른 유형보다 사진의 품질이 향상됩니다. PNG (Portable Network Graphics) 파일은 일반적으로 압축 손실이 발생하는 이미지보다 파일 크기가 크지 만 충실도와 화질을 잃지 않고 미디어를 공유하는 데 사용됩니다. GIF 는 손실없이 압축되는 매우 오래된 이미지 형식입니다.

파일 크기를 줄이거 나 최적화하는 기술은 많은 분야의 프로그래머가 개발 분야에 관계없이 학문 분야에서 배웁니다. 디플레이션 ( PNG에 사용) 또는 Lempel-Ziv-Welch 알고리즘 (일반적으로 GIF에 사용)과 같은 이름 오늘날 많은 컴퓨터 과학 교실은 많은 프로그래머의 귀를 사로 잡으며 점점 더 효율적인 압축 기술에 대한 추가 개발 및 문서화를 통해 억만 장자 플랫폼이 합리적으로 효율적인 알고리즘을 통합하여 매우 멋진 그림을 출력하면서 기술을 만들지 않을 것으로 기대합니다. 서버와 사용자의 하드웨어에 너무 많은 세금을 부과합니다.

그러나 이것은 단순히 그렇지 않습니다. 수백만 명의 Instagrammer와 I가 매일 가져 와서 업로드하는 사진은 기술 세계의 이러한 초강대국의 기술력에 대한 이야기와 직접 모순됩니다. 최고의 사용자 경험. 그러나 여전히 대답이 남아있는 질문이 있습니다. 왜 iOS가 아닌 Android입니까?

VSCO 및 Android 메모리

Reddit과 같은 인기있는 인터넷 포럼이 일상적인 분노의 원인을 파악하려고 시도했지만, 불공정에는 안드로이드 하드웨어가 컴퓨팅 파워 부서에서 본질적으로 열등하다는 설명 외에는 논리적 근거가없는 것처럼 보였습니다. 방대한 저급 Android 기기의 경우, 이러한 요금은 휴대 전화 요금에 관계없이 전체 플랫폼에서 일관된 사용자 경험을 보장하기 위해 취해 져야했습니다. 몇 달이지나면서 모든 Instagram 업데이트 이후의 보고서는 동일한 문제를 계속보고했으며, 이 문제는 포럼 사용자들 사이에서 응용 프로그램의 모든 반복을 뒤 따르는 실행중인 개그가되었습니다.

또한 인기있는 카메라 및 사진 편집 응용 프로그램 VSCO Cam에서도 비슷한 현상이 나타났습니다. “Android Photography의 새로운 표준”이라고 언급 한 일부 사람들은이 주장에 따라 응용 프로그램이 부족하다는 것을 빨리 알게되었습니다. 눈에 띄는 품질 손실 및 유물 유형은 Instagram의 품질 손실과 유사하여 일부 점을 연결하는 선이 있다고 생각했습니다. 지금까지는이 문제의 원인이 무엇인지에 대한 추측 만있었습니다. 일부는 안드로이드의 내장 비트 맵 다운 샘플링 알고리즘에서 직접 문제를 비난했습니다. 그러나 가장 주목할만한 원인으로 보이는 것은 Instagram 및 VSCO가 다운 샘플링 알고리즘, 특히 가장 가까운 이웃 리샘플링의 구현이 잘못되었다는 단순한 사실이었습니다. 그러나 개발자의 공식 단어가 없으면 추측을 완전히 확인할 수 없었습니다.

그런 다음 VSCO의 기술 지원을 통해 해상도와 충실도의 손실이 소프트웨어 구현이 아니라 Android 기기의 메모리 제약이라는 사실을 알게되었습니다.

"대부분의 기가 바이트 이상의 메모리를 보유하고 있음에도 불구하고 대부분의 Android 기기는 메모리에 상당히 제한되어 있지만, 애플리케이션은 사용 가능한 모든 메모리 를 사용할 수 없으므로 Android에서 제공 한 사항으로 인해 작성해야합니다."

“가져온 장치와 사용 가능한 메모리에 따라 가져올 때 큰 이미지가 최대 50 % 축소 될 수 있습니다 . "

또한 이미지 처리 기술이 메모리와 SoC 모두에 매우 과세된다고 주장하며 이는 Android 메모리 제한과 결합하여 iOS에서 찾을 수없는 품질 병목 현상을 일으키는 이유입니다.

Android 개발자 교육 기사에 따르면 기능적 멀티 태스킹 환경을 유지하기 위해 각 앱힙 크기에 대한 제한이 설정되어 있습니다. 기기가 사용할 수있는 RAM의 양에 따라 달라지며 앱이 힙 용량에 접근하면 RAM이 부족해질 위험이 있습니다.

언뜻보기에 VSCO의 이야기는 설득력이있는 것 같지만, 회의론자의 접근 방식을 취하는 사람들이 흔들리지 않는 것의 일부를 설명하지는 않습니다.

한정

매우 겉보기에는 다음과 같은 질문을 할 수 있습니다. 일반적으로 1GB에서 2GB 사이의 RAM과 최신 휴대용 프로세서에서 스마트 폰으로 이미지를 전체 해상도로 처리 할 수없는 경우 32MB RAM DSLR 카메라가 왜 그렇게 할 수 있습니까?

이 문제에 대한보다 강력한 의견을 수집하기 위해 Senior Recognized Developers 중 한 명에게 연락했습니다. OmniROM 개발자 XpLoDWilD는 다음과 같이 언급했습니다.

“여기서 제한은 이미지가 계산되거나 처리되는 방식입니다. GPU가 더 빠르며이를 수행하는 가장 빠른 방법은 이미지를 GPU에 텍스처로 '업로드'하여 처리하는 것입니다. GPU 최대 텍스처 크기 (일반적으로 4096)로 제한되는 문제 × 4096 "

일반적으로 8MP 그림은 3264 × 2448이며 4000 × 3000의 최대 12MP 한계에 맞을만큼 작습니다. 최신 플래그십 및 카메라 폰 센서는 13MP 이상으로 올라갈 수 있으며 최대 GPU 최대 텍스처 크기보다 큰 그림 크기를 가질 수 있으며, 이로 인해 제약 조건 내에서 이미지를 축소하고 전체 세부 사항을 잃을 수밖에 없습니다.

"문제는 앱이 축소 된 버전을 업로드 한다는 것이 아니라 오히려 앱이 축소 된 버전의 이미지 를 처리하고 처리 된 파일을 업로드하는 것"이라고 덧붙였습니다. "아마도 처리 시간을 더 단축하기 위해 해상도를 더 낮게 설정했습니다."

XpLoDWilD는 처리 시간GPU 제약 사이의 미세한 균형은 사용자에게 작업중인 이미지의 완전히 처리 된 미리보기를 표시하는 것이 아니라 편집 프로세스에 대한 시각적 도움이 화면에 맞도록 축소 된 축소판 그림이되도록 제안합니다. (2048 × 2048보다 작은 것). 이 썸네일은 일반적으로 안정적으로 빠르게 처리 될 수 있으며, 여전히 사용자에게 그림이 어떻게 보일지에 대한 올바른 평가를 제공합니다. 사용자가 값 조정 및 필터 선택에서 선택한 사항을 확인하면 이미지를 축소판 해상도 크기의 격자로 분할 한 다음 각 블록을 개별적으로 처리하여 전체 해상도 그림이 배경에서 변환됩니다. 마지막 단계는 각 영역을 하나의 큰 풀 해상도 비트 맵에 다시 장착하여 CPU에서 최종 이미지를 합성하는 것입니다.

이것이 원래 해상도로 이미지를 처리하는 한 가지 방법입니다. 사진을 처리하는 순간까지의 미리보기가 업로드 준비가 된 것과 동일한 끔찍한 품질과 아티팩트를 특징으로하지 않는다면 Instagram이 보이지 않는 것입니다. 그림. 미리보기 이미지는 잔인한 압축을 거치지 않는 것처럼 보이므로 최종 이미지를 처리하는 순간 압축이 수행되어 저품질 이미지가 출력됩니다.

Android 플랫폼은 이미지를 고해상도로 처리하는 데 아무런 문제가 없으며 업로드하는 데 훨씬 적습니다. 하드웨어 측면에서 최신 iPhone의 텍스처 크기 제한은 2048 ~ 4096입니다. 따라서 이는 하드웨어 제한이 아니며 플랫폼 제한이 아닙니다. 다른 개발자가 해결할 수 있고 해결해 왔던 것입니다.

그러나 힙 크기에 제한이있었습니다!

그렇습니다. 고밀도 이미지에 필요한 추가 메모리로 인해 Java 힙에는 합리적인 제한이 있습니다. 몇 가지 연구를 거친 후 개발자가 Java Native Interface를 통해 응용 프로그램에 C / C ++로 작성된 코드를 재사용하여 실행할 수있는 Android NDK 또는 Native Development Kit에 대해 논의하는 Google 그룹에 대한이 토론 스 니펫을 발견했습니다. 가상 머신 대신 프로세서에서 직접 해석되므로 앱이 다소 빠릅니다.

대화에서 Google 엔지니어와 Android Framework 개발자 Dianne Hackborn은 Android의 메모리 제약에 대한 오해를 해결합니다. 그녀는 “이것이 NDK 목록이기 때문에 Java 힙에만 있기 때문에 실제로는 제한이 없습니다. 네이티브 힙에서의 할당에는 제한이 없습니다…“ . RAM 사용에 관한 한 그녀는 다음과 같이 말합니다. “RAM이 충분하면 데이터는 RAM에 보관됩니다. 그렇지 않다면… 당신은 여전히 ​​뛰고 있습니다.”

그녀는 또한 네이티브 힙 에 제한이 없을뿐만 아니라 GPU 힙에 대한 제한도 없다고 말합니다 . 따라서 NDK의 존재로 인해 사용할 수있는 메모리, 일반 처리 또는 GPU의 양과 관련하여 Android에서“제한된”제한이없는 것 같습니다.

그러나 그럼에도 불구하고 Java 힙은 하나의 그림에 대해 충분히 커야합니다.

. 비 압축 비트 맵 (ARGB 8888) 인 13MP 사진은 약 50MB 가 소요됩니다. 기본 최대 힙 크기는 Android 디바이스 및 실행중인 Android 버전에 따라 최대 256mb 또는 512mb 입니다. Instagram은 유휴 상태 일 때 약 62MB를 사용하며 시스템 모니터 그래프에서 볼 때 검색하는 동안 RAM 사용량이 증가하고 13MP 이미지 처리는 무시할 수없는 것으로 보이며 확실히 "Android에서 부과 한"한계에 가깝습니다. 관계없이 해결할 수 있으며 다른 알고리즘보다 특정 알고리즘을 사용하여 피하거나 완화 할 수도 있습니다.

결론

앞서 언급했듯이, 우리는 이러한 앱의 배경에서 어떤 일이 벌어지고 있는지에 대한 전체 이야기를 알지 못할 수도 있습니다. 그러나 제조사의 응답이나 사과 학자의 정당화에 의한 정당화는 면밀한 조사를 통해 그다지 타당하지 않은 것처럼 보입니다. 여기서 문제는 안드로이드의 하드웨어 나 소프트웨어가 제공 할 수있는 한계가 아닌 평범한 소프트웨어 구현으로 인한 것 같습니다.

압축과 관련하여 작동하는 응용 프로그램이 있으며 Android의 내부 작업에 대한 문서의 내용과 내용, 현재 Android 하드웨어의 잠재력 및 전문가의 의견은 모두 Android 사용자가 부당하게 직면하는 것으로 보입니다. 고의적으로 또는 최소한 인정할만한 해결책.

나는 안드로이드 사용자가 진실을 얻을뿐만 아니라 그들이받을만한 치료를해야 할 때라고 생각합니다. 하드웨어와 관련하여 평균적으로 평균이 중간 인 안드로이드 기기가 아이폰보다 낮을 수도 있지만, 표준을 낮추고 모든 사용자의 경험을 망치는 이유는 없습니다. 또한 각 개발자가 남은 플랫폼을 사용하면서 시스템보다는 개발자가 시스템에 대한 불만을 점점 더 집중하게됩니다.

추천 이미지를 PixelPulse에 제공