2012-06-14 2 views
3

앱에 24 비트 PNG가 250KB를 초과 할 수 없다는 비즈니스 로직이있는 경우 이미지의 최대 너비 인 &이 250KB 요구 사항에 부합하는지 예측할 수 있습니까?파일 크기 제한을 기반으로 png 크기를 결정하는 방법은 무엇입니까?

색상 심도, 알파 채널 등 다양한 변수가 있으므로이를 알고 있을까요? 아니면 가까이에?

+1

을 당신은 최대 크기를 찾을 수 있지만, I 정말 거대한 솔리드 이미지 (예 : 모든 공백)를 PNG로 압축하면 아주 작은 png 파일이 생성되는 것처럼 실용적이지 않다고 생각하지 마십시오. – gusbro

+0

정확합니다. 불가능합니다. 이미지를 PNG로 작성하고 크기를 측정 한 다음에 만 알 수 있습니다. – Ani

답변

0

거대한 빈 파일을 png로 저장하면 png 압축으로 인해 크기가 매우 작아집니다.

사용자에게 크기를 제공하려면 파일 크기가 아닌 치수를 기반으로 이미지를 허용하도록 비즈니스 로직을 변경해야합니다.

0

압축되지 않은 것으로 가정하여 PNG 파일의 최대 크기를 예측할 수 있습니다. 너비 * 높이 * 3을 곱하고 헤더 오버 헤드에 비트를 추가하십시오.

더 나은 결과를 얻으려면 응용 프로그램에 사용할 수있는 많은 수의 일반적인 PNG 파일을 측정하고 실제 파일 크기와 위 예측의 비율이 가장 큰 파일을 찾으십시오. 이 비율 또는 약간 큰 숫자를 사용하여 다른 이미지의 크기를 추정하십시오.

이렇게해도 결과가 충분히 작다고 보장 할 수는 없지만 실제로는 인코딩 된 이미지를 실제로 쓰려고 시도하여 결정할 수 있습니다. 그러나 그것은 가장 퇴보 한 경우를 제외하고는 모든 사람들에게 충분해야합니다.

편집 : 명확하지 않은 경우 뒤로 작업하여 최대 파일 크기에서 이미지 크기를 가져올 수 있습니다. w 가정하고 h 최대 수용 가능한 폭과 높이 a있는 것은 w/h 종횡비이며 r 위에서 발견 된 파일 사이즈/화상 사이즈의 비율이다 :

w = sqrt((250K * a)/(r * 3)) 
h = w/a 

그래서 예 a 경우 1.5이었다 r이 0.5 인 경우 크기는 500 x 333이됩니다.

+1

질문은 이미지가 주어진 최대 PNG 파일이 아니 었습니다. 문제는 PNG 파일 크기를 고려한 가장 큰 이미지였습니다. –

+0

@ MarkAdler, 일단 두 사람 사이의 관계를 알고 있으면 방정식을 반대로하는 것이 쉽지 않습니다. –

+1

아니요. 두 가지 완전히 다른 관계이기 때문입니다. 귀하의 대답은 잘못된 질문에 대한 올바른 접근 방법입니다. 그 관계를 되 돌리는 것은 실제로 묻는 질문에 대한 잘못된 대답입니다. 심하게 틀린 답을 얻으려면 최소 압축 량을 취해야합니다. 올바른 질문에 대한 올바른 대답을 얻으려면 최대 압축 양을 가정해야합니다. –

3

가능하지만 유용하지 않을 수 있습니다. PNG의 zlib 압축은 최대 압축 비율이 1032 : 1입니다 (동일한 바이트 값의 긴 시퀀스의 경우). 따라서 압축 된 250KB는 약 250MB의 압축을 풀 수 있습니다 (랩퍼 및 기타 등은 무시). 정사각형 이미지의 경우 픽셀 당 3 바이트에서 거의 10,000 x 10,000 픽셀입니다. 다른 답변 여기서 알수 화소 최소 수를 제공 최소 압축을 가정

참고, 예를 들어 500 x 333. 질문에서 "이미지가 될 수있는 가장 큰 너비 & 높이"에 대한 질문 이후, 그 대답은 유용하지 않습니다. 물론 10,000 X 10,000이다 초과 500 X 333 업데이트

:

24 비트 픽셀의 최대 수가 최소화 PNG 파일 결과 (픽셀 당 3 바이트에 기초한 정확한 계산에 저장된 n 바이트의 파일 크기의 함수로서 압축 된 데이터)

floor(((n - 77) * 8 - 1)/2) * 86 + 1 

그래서 1024 * 250 = 256,000 바이트, 우리는 88,037,427 픽셀을 얻는다. 정사각형 이미지의 경우 약 9383 x 9383 픽셀입니다.

1

동일한 문제를 처리 한 후 작동하는 솔루션을 만들었습니다.

최악의 시나리오에서 압축이 전혀 효과가 없다고 가정하면 각 픽셀은 8 바이트의 데이터를 저장하며 각 R, G, B & A에 대해 2 바이트를 저장합니다. 따라서 100x100 픽셀 이미지는 최대 80,000 바이트의 크기, 약간의 무시할만한 메타 데이터.

이러한 간단한 계산을 수행 한 후에는 얼룩덜룩 한 멀티 컬러 사진을 사용하여 여러 가지 실험을 수행했으며 크기는 10k 픽셀 당 약 30kb가되지 않습니다.

이 지식으로 무장 한 필자는 크기가 한계 이하가 될 때까지 입력 png를 10 % 축소하고 결과 이미지로 올바른 크기를 유지하는 재귀 함수를 작성하여 대상 객체에 복원했습니다. 이것은 변수, 품질, 정확한 크기 및 CPU에 대한 추가로드 (무시할만한 수준)가 가장 좋았습니다 (실제 크기 축소가 발생하지 않았기 때문에).

이 PNG 사양은 내 가정에 대한 의존 것입니다 : http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html

당신은 또한 위키 백과 문서를 살펴 걸릴 할 수 있습니다 : https://en.wikipedia.org/wiki/Portable_Network_Graphics

관련 문제