640x480 JPEG의 최대 크기는 얼마입니까?


25

몇 시간 동안 밤하늘의 특정 사진을 찍는 데이터 저장 장치를 만들고 있는데 사진이 모두 촬영 된 직후 다운로드됩니다. 메모리 카드는 모든 사진을 한 번에 저장할 수 있어야합니다.

촬영할 JPEG는 640x480 픽셀이므로 메모리 카드에 100 개의 공간이 충분해야합니다. 640x480 JPEG의 최대 크기는 얼마입니까?

나는 이것을 알아 내기 위해 테스트 사진을 찍었습니다.

#1# 2#삼

  • "스택 오버 플로우"이미지의 파일 크기는 73,774 바이트입니다.
  • 흰색 이미지의 파일 크기는 36,607 바이트입니다.
  • 그러나 체크 무늬 사진의 파일 크기는 149,339 바이트입니다.

파일 크기가 복잡함에 따라 증가한다고 가정합니다.

얼마나 복잡하고 어떤 크기인지 알지 못하고 메모리 카드에 충분한 공간을 100640x480 JPEGS에 맞추려면 어떻게해야합니까? 이러한 캡처 장치를 많이 만들 수 있으므로 추가 공간을 낭비하고 싶지 않습니다.


이미지 제작자에 따라 다릅니다. 100 품질의 JPEG는 쉽게 크기를 늘릴 수 있습니다. 카메라 및 카메라 설정은 무엇입니까?
John Dvorak

테스트 카메라는 Canon Powershot A1100 IS입니다. 자세한 내용은 요청한 내용이 확실하지 않기 때문에 메타 데이터를 확인할 수 있습니다.
Blue Ice

1
dif에서 밤하늘의 샘플 사진을 찍은 적이 있습니다. Q 설정? 시험으로?
Carl B

2
이것은 무엇 을 위해 ? jpeg가 올바른 형식의 선택인지 확인하십시오.
잭 에이 들리

3
Jack Aidleys 의견에 배경 추가 : JPEG 압축은 사진을 변경합니다. 더 작은 파일 크기를 얻기 위해 가정하고 정보를 버립니다. (100 % 품질로 설정하지 않은 경우 압축되지 않은 형식을 사용할 수도 있습니다. 디지털 카메라에는 종종 뻣뻣하거나 원시 설정이 있습니다. 별과 같은 작은 점을 모두 유지하려면 다음 중 하나를 사용하십시오. 이들). 또한 이미지 크기를 완전히 예측할 수 있습니다.
Hennes

답변:


22

여기서는 JPEG 파일 크기의 상한을 제안합니다. 보다 일반적인 jpeg 크기에 대한 설명은 Ilmari Karonen의 답변 을 참조하십시오 .

640X480 32 비트 비트 맵 이미지의 픽셀 저장 공간은 다음과 같이 계산할 수 있습니다 ( 답변을 기반으로하지만 Ignacio Vazquez-Abrams의 의견 과이 답변 에 따라 수정 됨 ).

파일에 압축이 적용되지 않았다고 가정하면 307,200 개의 픽셀이 있으며 0.3MP입니다. 편리한 조회 테이블

각 픽셀에 32 비트의 정보가 포함 된 경우

  1. 307,200 * 32 = 9,830,400 비트 정보
  2. 8 비트로 나누어 바이트 값이됩니다.
  3. 9,830,400 / 8 = 1228800 바이트 (또는 1.17Mb )

이것은 압축되지 않은 비트 맵의 ​​크기이며 JPEG 파일 크기의 상한이어야합니다 (실제로 JPEG 형식은 compression을 사용하므로 특히 야간 사진을 찍는 경우 이미지가 훨씬 작아야합니다) 하늘에는 검정색이 많이 포함되어 있습니다. 문제의 가장 큰 예제 이미지는 0.14MB에 불과합니다.

그러나 특정 문제와 관련하여 상한을 사용하더라도 100 개의 이미지는 117MB에 불과하며 128MB의 작은 메모리 카드를 본 지 오래되었습니다. 현재 사용 가능한 메모리 카드에 필요한 용량이 충분하다고 생각합니다.

최대 jpeg 파일 크기 문제는 분명히 논쟁의 여지가 있습니다. 스택 오버플로 답변은 이론적으로 픽셀 당 20.25 바이트 또는 귀하의 경우 5.9MB의 최대 크기를 제안하지만 해당 크기의 이미지를 생성하려면 jpeg 형식의 압축 체계를 고의적으로 오용해야하므로 그러한 경우가 거의 없습니다. 카메라로 만든 것.


1
불행히도 압축되지 않은 비트 맵 값조차도 패킹을 가정하기 때문에 조금 낮습니다. 압축이 풀린 비트 맵은 픽셀 당 32 비트 ( 정렬 이유로)를 사용하여 파일 크기를 33 % 증가시킵니다.
Ignacio Vazquez-Abrams

감사합니다 @ IgnacioVazquez-Abrams. 그것이 받아 들인 대답이 정확하다고 가정하면 얻을 수있는 것입니다.
ForeverWintr

1
@ IgnacioVazquez-Abrams- "정렬"은 프로세서 (저장 매체가 아님)에 의해 지시되는 속성이며, 데이터가 RAM에있어 처리 할 때 편리합니다. 저장 목적으로, 32 비트 워드 정렬은 반드시 필요한 것은 아니며 사치입니다. 패킹 데이터는 스토리지에 쓰기 전에 일반적인 작업이며, 특히 25 % 절약됩니다. 원시 형식에 대해 각 픽셀을 정확히 3 바이트로 저장하는 디지털 카메라를 보았습니다.
톱밥

1
"... 확실히 사치스러운." 현대. 많은 달 전에는 사이클 절약 기능으로 간주되었습니다 (시간이 걸리면 부하에 정렬 할 필요가 없습니다).
Ignacio Vazquez-Abrams

3
실제로 일부 시스템은 RGB 이미지 데이터를 메모리에 픽셀 당 4 바이트로 저장할 수 있지만 거의 모든 이미지 파일 형식은 최대 4 픽셀 당 3 바이트를 사용합니다 (실제 알파 채널이 4 바이트에 저장되어 있지 않는 한). 아래 답변을 참조하십시오.
Ilmari Karonen

35

확인하기 위해 실험적으로 ForeverWintr의 분석을 테스트 하겠습니다 .

JPEG 압축을위한 입력 화상의 최악 (또는 임의의 압축, 실제로는) 이론적 비압축성 인 RGB 랜덤 노이즈 균일하다. netpbm 도구를 사용하여 생성하겠습니다 .

$ rawtoppm < /dev/urandom 640 480 > rnd.ppm
$ pnmtopng < rnd.ppm > rnd.png
$ du -b rnd.*
923772  rnd.png
921615  rnd.ppm

균일하게 임의의 RGB 노이즈, 무손실 PNG 형식
(균일하게 임의의 RGB 노이즈, 무손실 PNG 형식, 903kb)

참고 (2017 년 3 월) : 이 답변을 처음 작성하고 2013 년에 다시 올렸을 때 위의 이미지 PNG 형식 으로 되어 있다고 확신합니다 . 어느 시점에서 자동으로 JPEG로 변환되어 시각적 비교를 쓸모 없게 만듭니다.

새 PNG 테스트 이미지를 다시 업로드하려고 시도했지만 이미지에서 임의의 PNG 파일 크기 제한에 도달하고 JPEG로 자동 변환됩니다. 이 문제를 해결할 방법이 있는지 확실하지 않지만 적어도 Linux 상자에 액세스 할 수 있으면 주어진 명령을 다시 실행하여 자체 테스트 이미지를 생성 할 수 있습니다. 어쨌든 압축 품질의 직접적인 시각적 비교를 방지하는 것 외에는 아래의 분석이 어떤 식 으로든 무효화되지 않습니다.

압축되지 않은 PPM 파일의 길이는 예상대로 640 × 480 × 3 = 921,600 바이트에 최소 PPM 헤더의 경우 15 바이트입니다. PNG 형식을 사용하여 손실없이 압축하려고하면 크기가 2157 바이트 증가하여 PNG 헤더와 메타 데이터에 의해 압축되어 압축 불가능한 데이터를 압축하려는 압축 알고리즘에서 약간의 비효율이 발생할 수 있습니다.

(예, 픽셀 당 3 바이트가 아닌 4의; 얻을 수있는 그래픽 파일 형식으로 간단하게 대한 경우에도 PPM 형식을 디스크에 픽셀 당 쓸모없는 네 번째 바이트를 저장하는 바보 충분하지 않다가. 일부 수 특히 알파 채널도 저장해야하지만 파일에 이미지를 쓸 때 이러한 이유가 적용되지 않는 경우 정렬 이유 때문에 메모리에 저장하는 이점 이 있습니다.)

그렇다면 JPEG는 어떻습니까? 먼저 압축 손실을 최소화 해 봅니다 (품질 = 100, 크로마 서브 샘플링 없음, 부동 소수점 DCT). 불행히도 pnmtojpeg매뉴얼 에는 모든 관련 옵션을 설정하는 방법이 명확하게 설명되어 있지 않습니다 (특히 -sample옵션은 libjpeg 문서의 파일을 참조하는 "마법사 옵션"섹션에 나열되어 있음). 대신 김프. 결과 파일은 다음과 같습니다.

897249  rnd.jpg

JPEG 압축 RGB 노이즈, 품질 = 100, 크로마 서브 샘플링 없음
(JPEG 압축 RGB 노이즈, 품질 = 100, 크로마 서브 샘플링 없음, 876 kb)

어떻게 작아 질 수 있습니까? 순수한 소음은 압축 할 수 없다고 말하지 않았습니까? 음, 일 정상 JPEG 압축이 아닌, 심지어 최대 품질로이다 매우 무손실. 김프에서 이미지를 다시 열고 원본과 비교하면 일부 픽셀의 색상 값이 1-2 단계 (256 개 중)만큼 이동했음을 알 수 있습니다. 이것들은 JPEG 압축 알고리즘이 "속임수"로 여기에서 조금 던져 버린 픽셀입니다. 다른 곳에서는 변화가 눈에 띄지 않을 것으로 추정했습니다. 실제로, 육안으로 볼 수없는 결과는 원본과 상당히 구별 할 수 없지만, 폐기 된 비트는 헤더 및 인코딩 오버 헤드를 고려한 후에도 파일 크기가 크게 감소합니다.

그것은 최대 품질이었습니다. pnmtojpeg기본값 (품질 = 75, 서브 샘플링 사용) 과 같은 일반적인 설정은 어떻습니까? 해 봅시다:

$ pnmtojpeg < rnd.ppm > rnd2.jpg
$ du -b rnd2.jpg
185128  rnd2.jpg

JPEG 압축 RGB 노이즈, 품질 = 75, 크로마 서브 샘플링
(JPEG 압축 RGB 노이즈, 품질 = 75, 크로마 서브 샘플링, 184 kb)

와우, 901에서 184kb까지! 그러나 그것은 매우 공격적인 압축이며 이미지를 자세히 비교할 때 차이점을 분명히 알 수 있습니다. 대부분 기본적으로 색상 (색조 / 채도) 데이터의 75 %를 버리는 크로마 서브 샘플링 때문입니다. 서브 샘플링이 비활성화 된 김프에서 시도하면 350,618 바이트 파일이 확대 되어도 원본과 거의 비슷하게 보입니다.

어쨌든,이 모든 포인트는 것을 증명하는 것입니다, 시끄러운 당신의 밤 하늘의 사진이 될 수 있는지에 상관없이, 당신이 선택할 수 있습니다 얼마나 높은 품질에 상관없이, 그냥 없다 방법 640 × 480 JPEG 파일은 900보다 훨씬 더 큰 얻을 수 있습니다 kb. (카메라가 멀티 메가 바이트 Exif 컬러 프로파일을 똑같이 어리석은 것에 부착하지 않는 한, 즉 더 일반적인 JPEG 압축 설정을 사용하는 경우 가능한 최대 파일 크기는 약 200kb 정도로 줄어 듭니다. .


4
이론적으로 는 무손실 압축에 대해서만 압축 할 수 없습니다.
Daniel Beck

1
@DanielBeck : 그렇습니다. 분명히 일부 데이터 만 버리고 싶다면 원하는만큼 데이터를 압축 할 수 있습니다. (기본적으로 JPEG 압축은 손실 된 부분이 육안으로 눈에 띄지 않고 남은 부분을 컴팩트하게 인코딩 할 수있는 방식으로 수행하려고합니다. 노이즈는 여전히 어려운 경우입니다. 단지 소음으로 할 수있는 일에도 손실 압축 알고리즘은 부분을 던져입니다.)
Ilmari 카로 넨

어쩌면 그것은 나뿐이지만 두 번째 이미지는 첫 번째 이미지보다 밝게 보입니다.
Bogdacutu

@Bogdacutu : 브라우저가 색상 관리 등에서 이상한 일을하고있을 수도 있지만 항상 그래야하는 것은 아닙니다. 그래픽 편집기에서로드하여 색상 값을 비교해보십시오.
Ilmari Karonen

멋진 글쓰기 @ Ilmari.
ForeverWintr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.