앱에 24 비트 PNG가 250KB를 초과 할 수 없다는 비즈니스 로직이있는 경우 이미지의 최대 너비 인 &이 250KB 요구 사항에 부합하는지 예측할 수 있습니까?파일 크기 제한을 기반으로 png 크기를 결정하는 방법은 무엇입니까?
색상 심도, 알파 채널 등 다양한 변수가 있으므로이를 알고 있을까요? 아니면 가까이에?
앱에 24 비트 PNG가 250KB를 초과 할 수 없다는 비즈니스 로직이있는 경우 이미지의 최대 너비 인 &이 250KB 요구 사항에 부합하는지 예측할 수 있습니까?파일 크기 제한을 기반으로 png 크기를 결정하는 방법은 무엇입니까?
색상 심도, 알파 채널 등 다양한 변수가 있으므로이를 알고 있을까요? 아니면 가까이에?
거대한 빈 파일을 png로 저장하면 png 압축으로 인해 크기가 매우 작아집니다.
사용자에게 크기를 제공하려면 파일 크기가 아닌 치수를 기반으로 이미지를 허용하도록 비즈니스 로직을 변경해야합니다.
압축되지 않은 것으로 가정하여 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이됩니다.
질문은 이미지가 주어진 최대 PNG 파일이 아니 었습니다. 문제는 PNG 파일 크기를 고려한 가장 큰 이미지였습니다. –
@ MarkAdler, 일단 두 사람 사이의 관계를 알고 있으면 방정식을 반대로하는 것이 쉽지 않습니다. –
아니요. 두 가지 완전히 다른 관계이기 때문입니다. 귀하의 대답은 잘못된 질문에 대한 올바른 접근 방법입니다. 그 관계를 되 돌리는 것은 실제로 묻는 질문에 대한 잘못된 대답입니다. 심하게 틀린 답을 얻으려면 최소 압축 량을 취해야합니다. 올바른 질문에 대한 올바른 대답을 얻으려면 최대 압축 양을 가정해야합니다. –
가능하지만 유용하지 않을 수 있습니다. 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 픽셀입니다.
동일한 문제를 처리 한 후 작동하는 솔루션을 만들었습니다.
최악의 시나리오에서 압축이 전혀 효과가 없다고 가정하면 각 픽셀은 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
을 당신은 최대 크기를 찾을 수 있지만, I 정말 거대한 솔리드 이미지 (예 : 모든 공백)를 PNG로 압축하면 아주 작은 png 파일이 생성되는 것처럼 실용적이지 않다고 생각하지 마십시오. – gusbro
정확합니다. 불가능합니다. 이미지를 PNG로 작성하고 크기를 측정 한 다음에 만 알 수 있습니다. – Ani